forked from pool/breezy
Antonio Larrosa
7a9183b45b
- Patches from upstream to build with Dulwich 0.20.5: * 7551_7550.diff * 0001-Fix-tests-with-newer-dulwich.patch * 0002-Fix-more-tests.patch OBS-URL: https://build.opensuse.org/request/show/829984 OBS-URL: https://build.opensuse.org/package/show/devel:tools:scm/breezy?expand=0&rev=10
198 lines
7.9 KiB
Diff
198 lines
7.9 KiB
Diff
=== modified file 'breezy/git/branch.py'
|
|
--- a/breezy/git/branch.py 2020-05-06 00:45:15 +0000
|
|
+++ b/breezy/git/branch.py 2020-06-21 02:49:35 +0000
|
|
@@ -137,6 +137,7 @@
|
|
updates = {}
|
|
conflicts = []
|
|
source_tag_refs = self.source.branch.get_tag_refs()
|
|
+ ref_to_tag_map = {}
|
|
|
|
def get_changed_refs(old_refs):
|
|
ret = dict(old_refs)
|
|
@@ -150,6 +151,7 @@
|
|
ret[ref_name] = unpeeled
|
|
updates[tag_name] = self.target.branch.repository.lookup_foreign_revision_id(
|
|
peeled)
|
|
+ ref_to_tag_map[ref_name] = tag_name
|
|
self.target.branch._tag_refs = None
|
|
else:
|
|
conflicts.append(
|
|
@@ -158,8 +160,14 @@
|
|
self.target.branch.repository.lookup_foreign_revision_id(
|
|
old_refs[ref_name])))
|
|
return ret
|
|
- self.target.branch.repository.controldir.send_pack(
|
|
+ result = self.target.branch.repository.controldir.send_pack(
|
|
get_changed_refs, lambda have, want: [])
|
|
+ if result is not None and not isinstance(result, dict):
|
|
+ for ref, error in result.ref_status.items():
|
|
+ if error:
|
|
+ warning('unable to update ref %s: %s',
|
|
+ ref, error)
|
|
+ del updates[ref_to_tag_map[ref]]
|
|
return updates, set(conflicts)
|
|
|
|
|
|
@@ -1170,6 +1178,7 @@
|
|
isinstance(target, RemoteGitBranch))
|
|
|
|
def _basic_push(self, overwrite, stop_revision, tag_selector=None):
|
|
+ from .remote import RemoteGitError
|
|
result = GitBranchPushResult()
|
|
result.source_branch = self.source
|
|
result.target_branch = self.target
|
|
@@ -1201,9 +1210,17 @@
|
|
continue
|
|
refs[tag_name_to_ref(name)] = sha
|
|
return refs
|
|
- self.target.repository.send_pack(
|
|
+ dw_result = self.target.repository.send_pack(
|
|
get_changed_refs,
|
|
self.source.repository._git.generate_pack_data)
|
|
+ if dw_result is not None and not isinstance(dw_result, dict):
|
|
+ error = dw_result.ref_status.get(self.target.ref)
|
|
+ if error:
|
|
+ raise RemoteGitError(error)
|
|
+ for ref, error in dw_result.ref_status.items():
|
|
+ if error:
|
|
+ trace.warning('unable to open ref %s: %s',
|
|
+ ref, error)
|
|
return result
|
|
|
|
|
|
|
|
=== modified file 'breezy/git/interrepo.py'
|
|
--- a/breezy/git/interrepo.py 2020-02-18 03:11:01 +0000
|
|
+++ b/breezy/git/interrepo.py 2020-06-21 02:49:35 +0000
|
|
@@ -90,6 +90,7 @@
|
|
)
|
|
from .remote import (
|
|
RemoteGitRepository,
|
|
+ RemoteGitError,
|
|
)
|
|
from .unpeel_map import (
|
|
UnpeelMap,
|
|
@@ -377,8 +378,16 @@
|
|
return ret
|
|
self._warn_slow()
|
|
with self.source_store.lock_read():
|
|
- new_refs = self.target.send_pack(
|
|
+ result = self.target.send_pack(
|
|
git_update_refs, self.source_store.generate_lossy_pack_data)
|
|
+ if result is not None and not isinstance(result, dict):
|
|
+ for ref, error in result.ref_status.items():
|
|
+ if error:
|
|
+ raise RemoteGitError(
|
|
+ 'unable to update ref %r: %s' % (ref, error))
|
|
+ new_refs = result.refs
|
|
+ else: # dulwich < 0.20.3
|
|
+ new_refs = result
|
|
# FIXME: revidmap?
|
|
return revidmap, self.old_refs, new_refs
|
|
|
|
|
|
=== modified file 'breezy/git/remote.py'
|
|
--- a/breezy/git/remote.py 2020-06-12 17:44:18 +0000
|
|
+++ b/breezy/git/remote.py 2020-06-21 02:49:35 +0000
|
|
@@ -441,10 +441,10 @@
|
|
format=(format.encode('ascii') if format else None),
|
|
subdirs=subdirs,
|
|
prefix=(prefix.encode('utf-8') if prefix else None))
|
|
+ except HangupException as e:
|
|
+ raise parse_git_hangup(self.transport.external_url(), e)
|
|
except GitProtocolError as e:
|
|
raise parse_git_error(self.transport.external_url(), e)
|
|
- except HangupException as e:
|
|
- raise parse_git_hangup(self.transport.external_url(), e)
|
|
finally:
|
|
if pb is not None:
|
|
pb.finished()
|
|
@@ -465,10 +465,10 @@
|
|
self._refs = remote_refs_dict_to_container(
|
|
result.refs, result.symrefs)
|
|
return result
|
|
+ except HangupException as e:
|
|
+ raise parse_git_hangup(self.transport.external_url(), e)
|
|
except GitProtocolError as e:
|
|
raise parse_git_error(self.transport.external_url(), e)
|
|
- except HangupException as e:
|
|
- raise parse_git_hangup(self.transport.external_url(), e)
|
|
finally:
|
|
if pb is not None:
|
|
pb.finished()
|
|
@@ -488,10 +488,10 @@
|
|
return self._client.send_pack(
|
|
self._client_path, get_changed_refs_wrapper,
|
|
generate_pack_data, progress)
|
|
+ except HangupException as e:
|
|
+ raise parse_git_hangup(self.transport.external_url(), e)
|
|
except GitProtocolError as e:
|
|
raise parse_git_error(self.transport.external_url(), e)
|
|
- except HangupException as e:
|
|
- raise parse_git_hangup(self.transport.external_url(), e)
|
|
finally:
|
|
if pb is not None:
|
|
pb.finished()
|
|
@@ -520,7 +520,11 @@
|
|
|
|
def generate_pack_data(have, want, ofs_delta=False):
|
|
return pack_objects_to_data([])
|
|
- self.send_pack(get_changed_refs, generate_pack_data)
|
|
+ result = self.send_pack(get_changed_refs, generate_pack_data)
|
|
+ if result is not None and not isinstance(result, dict):
|
|
+ error = result.ref_status.get(refname)
|
|
+ if error:
|
|
+ raise RemoteGitError(error)
|
|
|
|
@property
|
|
def user_url(self):
|
|
@@ -663,7 +667,18 @@
|
|
else:
|
|
return source_store.generate_pack_data(
|
|
have, want, progress=progress, ofs_delta=ofs_delta)
|
|
- new_refs = self.send_pack(get_changed_refs, generate_pack_data)
|
|
+ dw_result = self.send_pack(get_changed_refs, generate_pack_data)
|
|
+ if not isinstance(dw_result, dict):
|
|
+ new_refs = dw_result.refs
|
|
+ error = dw_result.ref_status.get(actual_refname)
|
|
+ if error:
|
|
+ raise RemoteGitError(error)
|
|
+ for ref, error in dw_result.ref_status.items():
|
|
+ if error:
|
|
+ trace.warning('unable to open ref %s: %s',
|
|
+ ref, error)
|
|
+ else: # dulwich < 0.20.4
|
|
+ new_refs = dw_result
|
|
push_result.new_revid = repo.lookup_foreign_revision_id(
|
|
new_refs[actual_refname])
|
|
if old_sha is not None:
|
|
@@ -982,7 +997,12 @@
|
|
|
|
def generate_pack_data(have, want, ofs_delta=False):
|
|
return pack_objects_to_data([])
|
|
- self.repository.send_pack(get_changed_refs, generate_pack_data)
|
|
+ result = self.repository.send_pack(
|
|
+ get_changed_refs, generate_pack_data)
|
|
+ if result and not isinstance(result, dict):
|
|
+ error = result.ref_status.get(ref)
|
|
+ if error:
|
|
+ raise RemoteGitError(error)
|
|
|
|
|
|
class RemoteGitBranch(GitBranch):
|
|
@@ -1066,7 +1086,12 @@
|
|
return {self.ref: sha}
|
|
def generate_pack_data(have, want, ofs_delta=False):
|
|
return pack_objects_to_data([])
|
|
- self.repository.send_pack(get_changed_refs, generate_pack_data)
|
|
+ result = self.repository.send_pack(
|
|
+ get_changed_refs, generate_pack_data)
|
|
+ if result is not None and not isinstance(result, dict):
|
|
+ error = result.ref_status.get(self.ref)
|
|
+ if error:
|
|
+ raise RemoteGitError(error)
|
|
self._sha = sha
|
|
|
|
|
|
|