~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/fetch.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-02-25 01:11:57 UTC
  • mfrom: (4032.3.8 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20090225011157-xn0w5zux5mrges6j
(robertc) Move write locking and write group responsibilities into
        the Sink objects themselves,
        allowing complete avoidance of unnecessary calls when the sink is a
        RemoteSink. (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
104
104
            self.nested_pb = None
105
105
        self.from_repository.lock_read()
106
106
        try:
107
 
            self.to_repository.lock_write()
108
107
            try:
109
 
                self.to_repository.start_write_group()
110
 
                try:
111
 
                    self.__fetch()
112
 
                except:
113
 
                    self.to_repository.abort_write_group(suppress_errors=True)
114
 
                    raise
115
 
                else:
116
 
                    self.to_repository.commit_write_group()
 
108
                self.__fetch()
117
109
            finally:
118
 
                try:
119
 
                    if self.nested_pb is not None:
120
 
                        self.nested_pb.finished()
121
 
                finally:
122
 
                    self.to_repository.unlock()
 
110
                if self.nested_pb is not None:
 
111
                    self.nested_pb.finished()
123
112
        finally:
124
113
            self.from_repository.unlock()
125
114
 
161
150
        try:
162
151
            from_format = self.from_repository._format
163
152
            stream = self.get_stream(search, pp)
164
 
            missing_keys = self.sink.insert_stream(stream, from_format)
 
153
            resume_tokens, missing_keys = self.sink.insert_stream(
 
154
                stream, from_format, [])
165
155
            if missing_keys:
166
156
                stream = self.get_stream_for_missing_keys(missing_keys)
167
 
                missing_keys = self.sink.insert_stream(stream, from_format)
 
157
                resume_tokens, missing_keys = self.sink.insert_stream(
 
158
                    stream, from_format, resume_tokens)
168
159
            if missing_keys:
169
160
                raise AssertionError(
170
161
                    "second push failed to complete a fetch %r." % (
171
162
                        missing_keys,))
 
163
            if resume_tokens:
 
164
                raise AssertionError(
 
165
                    "second push failed to commit the fetch %r." % (
 
166
                        resume_tokens,))
172
167
            self.sink.finished()
173
168
        finally:
174
169
            if self.pb is not None:
195
190
                    revisions])
196
191
            elif knit_kind == "inventory":
197
192
                # Now copy the file texts.
198
 
                to_texts = self.to_repository.texts
199
193
                from_texts = self.from_repository.texts
200
194
                yield ('texts', from_texts.get_record_stream(
201
195
                    text_keys, self.to_repository._fetch_order,