845
845
raise errors.NoSuchRevision(self, revno)
846
846
return history[revno - 1]
848
849
def pull(self, source, overwrite=False, stop_revision=None,
849
possible_transports=None, _override_hook_target=None):
850
possible_transports=None, *args, **kwargs):
850
851
"""Mirror source into this branch.
852
853
This branch is considered to be 'local', having low latency.
854
855
:returns: PullResult instance
856
raise NotImplementedError(self.pull)
857
return InterBranch.get(source, self).pull(overwrite=overwrite,
858
stop_revision=stop_revision,
859
possible_transports=possible_transports, *args, **kwargs)
858
861
def push(self, target, overwrite=False, stop_revision=None, *args,
2177
2180
"""See Branch.basis_tree."""
2178
2181
return self.repository.revision_tree(self.last_revision())
2181
def pull(self, source, overwrite=False, stop_revision=None,
2182
_hook_master=None, run_hooks=True, possible_transports=None,
2183
_override_hook_target=None):
2186
:param _hook_master: Private parameter - set the branch to
2187
be supplied as the master to pull hooks.
2188
:param run_hooks: Private parameter - if false, this branch
2189
is being called because it's the master of the primary branch,
2190
so it should not run its hooks.
2191
:param _override_hook_target: Private parameter - set the branch to be
2192
supplied as the target_branch to pull hooks.
2194
result = PullResult()
2195
result.source_branch = source
2196
if _override_hook_target is None:
2197
result.target_branch = self
2199
result.target_branch = _override_hook_target
2202
# We assume that during 'pull' the local repository is closer than
2204
source.update_references(self)
2205
graph = self.repository.get_graph(source.repository)
2206
result.old_revno, result.old_revid = self.last_revision_info()
2207
self.update_revisions(source, stop_revision, overwrite=overwrite,
2209
result.tag_conflicts = source.tags.merge_to(self.tags, overwrite)
2210
result.new_revno, result.new_revid = self.last_revision_info()
2212
result.master_branch = _hook_master
2213
result.local_branch = result.target_branch
2215
result.master_branch = result.target_branch
2216
result.local_branch = None
2218
for hook in Branch.hooks['post_pull']:
2224
2183
def _get_parent_location(self):
2225
2184
_locs = ['parent', 'pull', 'x-pull']
2226
2185
for l in _locs:
2275
2234
It has support for a master_branch which is the data for bound branches.
2279
def pull(self, source, overwrite=False, stop_revision=None,
2280
run_hooks=True, possible_transports=None,
2281
_override_hook_target=None):
2282
"""Pull from source into self, updating my master if any.
2284
:param run_hooks: Private parameter - if false, this branch
2285
is being called because it's the master of the primary branch,
2286
so it should not run its hooks.
2288
bound_location = self.get_bound_location()
2289
master_branch = None
2290
if bound_location and source.base != bound_location:
2291
# not pulling from master, so we need to update master.
2292
master_branch = self.get_master_branch(possible_transports)
2293
master_branch.lock_write()
2296
# pull from source into master.
2297
master_branch.pull(source, overwrite, stop_revision,
2299
return super(BzrBranch5, self).pull(source, overwrite,
2300
stop_revision, _hook_master=master_branch,
2301
run_hooks=run_hooks,
2302
_override_hook_target=_override_hook_target)
2305
master_branch.unlock()
2307
2237
def get_bound_location(self):
2309
2239
return self._transport.get_bytes('bound')[:-1]
2941
2871
"""Return a tuple with the Branch formats to use when testing."""
2942
2872
raise NotImplementedError(self._get_branch_formats_to_test)
2874
def pull(self, overwrite=False, stop_revision=None,
2875
possible_transports=None, local=False):
2876
"""Mirror source into target branch.
2878
The target branch is considered to be 'local', having low latency.
2880
:returns: PullResult instance
2882
raise NotImplementedError(self.pull)
2944
2884
def update_revisions(self, stop_revision=None, overwrite=False,
2946
2886
"""Pull in new perfect-fit revisions.
3015
2955
self.source.unlock()
2957
def pull(self, overwrite=False, stop_revision=None,
2958
possible_transports=None, _hook_master=None, run_hooks=True,
2959
_override_hook_target=None, local=False):
2962
:param _hook_master: Private parameter - set the branch to
2963
be supplied as the master to pull hooks.
2964
:param run_hooks: Private parameter - if false, this branch
2965
is being called because it's the master of the primary branch,
2966
so it should not run its hooks.
2967
:param _override_hook_target: Private parameter - set the branch to be
2968
supplied as the target_branch to pull hooks.
2969
:param local: Only update the local branch, and not the bound branch.
2971
# This type of branch can't be bound.
2973
raise errors.LocalRequiresBoundBranch()
2974
result = PullResult()
2975
result.source_branch = self.source
2976
if _override_hook_target is None:
2977
result.target_branch = self.target
2979
result.target_branch = _override_hook_target
2980
self.source.lock_read()
2982
# We assume that during 'pull' the target repository is closer than
2984
self.source.update_references(self.target)
2985
graph = self.target.repository.get_graph(self.source.repository)
2986
# TODO: Branch formats should have a flag that indicates
2987
# that revno's are expensive, and pull() should honor that flag.
2989
result.old_revno, result.old_revid = \
2990
self.target.last_revision_info()
2991
self.target.update_revisions(self.source, stop_revision,
2992
overwrite=overwrite, graph=graph)
2993
# TODO: The old revid should be specified when merging tags,
2994
# so a tags implementation that versions tags can only
2995
# pull in the most recent changes. -- JRV20090506
2996
result.tag_conflicts = self.source.tags.merge_to(self.target.tags,
2998
result.new_revno, result.new_revid = self.target.last_revision_info()
3000
result.master_branch = _hook_master
3001
result.local_branch = result.target_branch
3003
result.master_branch = result.target_branch
3004
result.local_branch = None
3006
for hook in Branch.hooks['post_pull']:
3009
self.source.unlock()
3017
3012
def push(self, overwrite=False, stop_revision=None,
3018
3013
_override_hook_source_branch=None):
3019
3014
"""See InterBranch.push.
3085
class InterToBranch5(GenericInterBranch):
3088
def _get_branch_formats_to_test():
3089
return BranchFormat._default_format, BzrBranchFormat5()
3091
def pull(self, overwrite=False, stop_revision=None,
3092
possible_transports=None, run_hooks=True,
3093
_override_hook_target=None, local=False):
3094
"""Pull from source into self, updating my master if any.
3096
:param run_hooks: Private parameter - if false, this branch
3097
is being called because it's the master of the primary branch,
3098
so it should not run its hooks.
3100
bound_location = self.target.get_bound_location()
3101
if local and not bound_location:
3102
raise errors.LocalRequiresBoundBranch()
3103
master_branch = None
3104
if not local and bound_location and self.source.base != bound_location:
3105
# not pulling from master, so we need to update master.
3106
master_branch = self.target.get_master_branch(possible_transports)
3107
master_branch.lock_write()
3110
# pull from source into master.
3111
master_branch.pull(self.source, overwrite, stop_revision,
3113
return super(InterToBranch5, self).pull(overwrite,
3114
stop_revision, _hook_master=master_branch,
3115
run_hooks=run_hooks,
3116
_override_hook_target=_override_hook_target)
3119
master_branch.unlock()
3089
3122
InterBranch.register_optimiser(GenericInterBranch)
3123
InterBranch.register_optimiser(InterToBranch5)