SHA256
1
0
forked from pool/breezy
breezy/7551_7550.diff
Antonio Larrosa 1053c1de24 Accepting request 855331 from home:mcepl:branches:devel:tools:scm
- Require the full python3 stdlib for sqlite3 import
  gh#openSUSE/python-rpm-macros#66

- Add skip_resource.setrlimit.patch to avoid tests failing in the limit
  environment of osc build, where resource.setrlimit() doesn't work
  (lp#1883125).

OBS-URL: https://build.opensuse.org/request/show/855331
OBS-URL: https://build.opensuse.org/package/show/devel:tools:scm/breezy?expand=0&rev=12
2020-12-15 13:27:45 +00:00

193 lines
8.1 KiB
Diff

=== modified file 'breezy/git/branch.py'
--- a/breezy/git/branch.py
+++ b/breezy/git/branch.py
@@ -137,6 +137,7 @@ class InterTagsFromGitToRemoteGit(InterT
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 @@ class InterTagsFromGitToRemoteGit(InterT
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 @@ class InterTagsFromGitToRemoteGit(InterT
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 @@ class InterLocalGitRemoteGitBranch(Inter
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 @@ class InterLocalGitRemoteGitBranch(Inter
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
--- a/breezy/git/interrepo.py
+++ b/breezy/git/interrepo.py
@@ -90,6 +90,7 @@ from .repository import (
)
from .remote import (
RemoteGitRepository,
+ RemoteGitError,
)
from .unpeel_map import (
UnpeelMap,
@@ -377,8 +378,16 @@ class InterToRemoteGitRepository(InterTo
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
--- a/breezy/git/remote.py
+++ b/breezy/git/remote.py
@@ -436,10 +436,10 @@ class RemoteGitDir(GitDir):
format=(format.encode('ascii') if format else None),
subdirs=subdirs,
prefix=(prefix.encode('utf-8') if prefix else None))
- 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)
+ except GitProtocolError as e:
+ raise parse_git_error(self.transport.external_url(), e)
finally:
if pb is not None:
pb.finished()
@@ -460,10 +460,10 @@ class RemoteGitDir(GitDir):
self._refs = remote_refs_dict_to_container(
result.refs, result.symrefs)
return result
- 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)
+ except GitProtocolError as e:
+ raise parse_git_error(self.transport.external_url(), e)
finally:
if pb is not None:
pb.finished()
@@ -483,10 +483,10 @@ class RemoteGitDir(GitDir):
return self._client.send_pack(
self._client_path, get_changed_refs_wrapper,
generate_pack_data, progress)
- 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)
+ except GitProtocolError as e:
+ raise parse_git_error(self.transport.external_url(), e)
finally:
if pb is not None:
pb.finished()
@@ -515,7 +515,11 @@ class RemoteGitDir(GitDir):
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):
@@ -658,7 +662,18 @@ class RemoteGitDir(GitDir):
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:
@@ -977,7 +992,12 @@ class RemoteGitTagDict(GitTags):
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):
@@ -1061,7 +1081,12 @@ class RemoteGitBranch(GitBranch):
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