Merge lp:~jelmer/brz/lock-contention into lp:brz/3.2

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz/lock-contention
Merge into: lp:brz/3.2
Diff against target: 104 lines (+25/-7)
1 file modified
breezy/git/remote.py (+25/-7)
To merge this branch: bzr merge lp:~jelmer/brz/lock-contention
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+416497@code.launchpad.net

Commit message

Raise LockContention error from remote Git.

Description of the change

Raise LockContention error from remote Git.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'breezy/git/remote.py'
2--- breezy/git/remote.py 2022-02-18 00:33:13 +0000
3+++ breezy/git/remote.py 2022-03-08 15:36:32 +0000
4@@ -39,6 +39,7 @@
5 DivergedBranches,
6 InProcessTransport,
7 InvalidRevisionId,
8+ LockContention,
9 NoSuchFile,
10 NoSuchRevision,
11 NoSuchTag,
12@@ -389,12 +390,15 @@
13
14 def __init__(self, pb):
15 self.pb = pb
16+ self.errors = []
17
18 def progress(self, text):
19 text = text.rstrip(b"\r\n")
20 text = text.decode('utf-8', 'surrogateescape')
21 if text.lower().startswith('error: '):
22- trace.show_error('git: %s', text[len(b'error: '):])
23+ error = text[len(b'error: '):]
24+ self.errors.append(error)
25+ trace.show_error('git: %s', error)
26 else:
27 trace.mutter("git: %s", text)
28 g = self._GIT_PROGRESS_PARTIAL_RE.match(text)
29@@ -410,6 +414,9 @@
30 trace.note("%s", text)
31
32
33+_LOCK_REF_ERROR_MATCHER = re.compile(b'cannot lock ref \'(.*)\': (.*)')
34+
35+
36 class RemoteGitDir(GitDir):
37
38 def __init__(self, transport, format, client, client_path):
39@@ -480,8 +487,10 @@
40 def send_pack(self, get_changed_refs, generate_pack_data, progress=None):
41 if progress is None:
42 pb = ui.ui_factory.nested_progress_bar()
43- progress = DefaultProgressReporter(pb).progress
44+ progress_reporter = DefaultProgressReporter(pb)
45+ progress = progress_reporter.progress
46 else:
47+ progress_reporter = None
48 pb = None
49
50 def get_changed_refs_wrapper(remote_refs):
51@@ -489,9 +498,18 @@
52 update_refs_container(self._refs, remote_refs)
53 return get_changed_refs(remote_refs)
54 try:
55- return self._client.send_pack(
56+ result = self._client.send_pack(
57 self._client_path, get_changed_refs_wrapper,
58 generate_pack_data, progress)
59+ for ref, msg in list(result.ref_status.items()):
60+ if msg:
61+ result.ref_status[ref] = RemoteGitError(msg=msg)
62+ if progress_reporter:
63+ for error in progress_reporter.errors:
64+ m = _LOCK_REF_ERROR_MATCHER.match(error)
65+ if m:
66+ result.ref_status[m.group(1)] = LockContention(m.group(1), m.group(2))
67+ return result
68 except HangupException as e:
69 raise parse_git_hangup(self.transport.external_url(), e)
70 except GitProtocolError as e:
71@@ -527,7 +545,7 @@
72 result = self.send_pack(get_changed_refs, generate_pack_data)
73 error = result.ref_status.get(refname)
74 if error:
75- raise RemoteGitError(error)
76+ raise error
77
78 @property
79 def user_url(self):
80@@ -686,7 +704,7 @@
81 new_refs = dw_result.refs
82 error = dw_result.ref_status.get(actual_refname)
83 if error:
84- raise RemoteGitError(error)
85+ raise error
86 for ref, error in dw_result.ref_status.items():
87 if error:
88 trace.warning('unable to open ref %s: %s',
89@@ -1015,7 +1033,7 @@
90 get_changed_refs, generate_pack_data)
91 error = result.ref_status.get(ref)
92 if error:
93- raise RemoteGitError(error)
94+ raise error
95
96
97 class RemoteGitBranch(GitBranch):
98@@ -1103,7 +1121,7 @@
99 get_changed_refs, generate_pack_data)
100 error = result.ref_status.get(self.ref)
101 if error:
102- raise RemoteGitError(error)
103+ raise error
104 self._sha = sha
105
106

Subscribers

People subscribed via source and target branches