Merge lp:~jelmer/brz-git/break-lock into lp:brz-git

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: 1916
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz-git/break-lock
Merge into: lp:brz-git
Diff against target: 70 lines (+24/-2)
2 files modified
branch.py (+3/-0)
transportgit.py (+21/-2)
To merge this branch: bzr merge lp:~jelmer/brz-git/break-lock
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+342511@code.launchpad.net

Commit message

Implement Branch.break_lock.

Description of the change

Implement Branch.break_lock.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) wrote :

Rubberstamp! Proposer approves of own proposal.

review: Approve
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 'branch.py'
2--- branch.py 2018-04-02 14:42:37 +0000
3+++ branch.py 2018-04-02 15:45:26 +0000
4@@ -604,6 +604,9 @@
5 def _unlock_ref(self):
6 self._ref_lock.unlock()
7
8+ def break_lock(self):
9+ self.repository._git.refs.unlock_ref(self.ref)
10+
11 def fetch(self, from_branch, last_revision=None, limit=None):
12 return branch.InterBranch.get(from_branch, self).fetch(
13 stop_revision=last_revision, limit=limit)
14
15=== modified file 'transportgit.py'
16--- transportgit.py 2018-04-02 15:24:40 +0000
17+++ transportgit.py 2018-04-02 15:45:26 +0000
18@@ -72,6 +72,7 @@
19 from ...errors import (
20 AlreadyControlDirError,
21 FileExists,
22+ LockBroken,
23 LockError,
24 LockContention,
25 NotLocalUrl,
26@@ -337,16 +338,27 @@
27 except KeyError:
28 return default
29
30+ def unlock_ref(self, name):
31+ if name == b"HEAD":
32+ transport = self.worktree_transport
33+ else:
34+ transport = self.transport
35+ lockname = name + ".lock"
36+ try:
37+ self.transport.delete(lockname)
38+ except NoSuchFile:
39+ pass
40+
41 def lock_ref(self, name):
42 if name == b"HEAD":
43 transport = self.worktree_transport
44 else:
45 transport = self.transport
46 self._ensure_dir_exists(name)
47+ lockname = name + ".lock"
48 try:
49 local_path = self.transport.local_abspath(name)
50 except NotLocalUrl:
51- lockname = name + ".lock"
52 # This is racy, but what can we do?
53 if self.transport.has(lockname):
54 raise LockContention(name)
55@@ -358,7 +370,14 @@
56 except FileLocked as e:
57 raise LockContention(name, e)
58 else:
59- return LogicalLockResult(gf.abort)
60+ def unlock():
61+ try:
62+ self.transport.delete(lockname)
63+ except NoSuchFile:
64+ raise LockBroken(lockname)
65+ # GitFile.abort doesn't care if the lock has already disappeared
66+ gf.abort()
67+ return LogicalLockResult(unlock)
68
69
70 class TransportRepo(BaseRepo):

Subscribers

People subscribed via source and target branches

to all changes: