summaryrefslogtreecommitdiffstats
path: root/project.py
diff options
context:
space:
mode:
Diffstat (limited to 'project.py')
-rw-r--r--project.py119
1 files changed, 58 insertions, 61 deletions
diff --git a/project.py b/project.py
index 04c43bb7..d81152cf 100644
--- a/project.py
+++ b/project.py
@@ -328,7 +328,6 @@ class RepoHook(object):
328 HookError: Raised if the user doesn't approve and abort_if_user_denies 328 HookError: Raised if the user doesn't approve and abort_if_user_denies
329 was passed to the consturctor. 329 was passed to the consturctor.
330 """ 330 """
331 hooks_dir = self._hooks_project.worktree
332 hooks_config = self._hooks_project.config 331 hooks_config = self._hooks_project.config
333 git_approval_key = 'repo.hooks.%s.approvedhash' % self._hook_type 332 git_approval_key = 'repo.hooks.%s.approvedhash' % self._hook_type
334 333
@@ -608,25 +607,24 @@ class Project(object):
608 """Get all existing local branches. 607 """Get all existing local branches.
609 """ 608 """
610 current = self.CurrentBranch 609 current = self.CurrentBranch
611 all = self._allrefs 610 all_refs = self._allrefs
612 heads = {} 611 heads = {}
613 pubd = {}
614 612
615 for name, id in all.iteritems(): 613 for name, ref_id in all_refs.iteritems():
616 if name.startswith(R_HEADS): 614 if name.startswith(R_HEADS):
617 name = name[len(R_HEADS):] 615 name = name[len(R_HEADS):]
618 b = self.GetBranch(name) 616 b = self.GetBranch(name)
619 b.current = name == current 617 b.current = name == current
620 b.published = None 618 b.published = None
621 b.revision = id 619 b.revision = ref_id
622 heads[name] = b 620 heads[name] = b
623 621
624 for name, id in all.iteritems(): 622 for name, ref_id in all_refs.iteritems():
625 if name.startswith(R_PUB): 623 if name.startswith(R_PUB):
626 name = name[len(R_PUB):] 624 name = name[len(R_PUB):]
627 b = heads.get(name) 625 b = heads.get(name)
628 if b: 626 if b:
629 b.published = id 627 b.published = ref_id
630 628
631 return heads 629 return heads
632 630
@@ -785,40 +783,40 @@ class Project(object):
785 783
786## Publish / Upload ## 784## Publish / Upload ##
787 785
788 def WasPublished(self, branch, all=None): 786 def WasPublished(self, branch, all_refs=None):
789 """Was the branch published (uploaded) for code review? 787 """Was the branch published (uploaded) for code review?
790 If so, returns the SHA-1 hash of the last published 788 If so, returns the SHA-1 hash of the last published
791 state for the branch. 789 state for the branch.
792 """ 790 """
793 key = R_PUB + branch 791 key = R_PUB + branch
794 if all is None: 792 if all_refs is None:
795 try: 793 try:
796 return self.bare_git.rev_parse(key) 794 return self.bare_git.rev_parse(key)
797 except GitError: 795 except GitError:
798 return None 796 return None
799 else: 797 else:
800 try: 798 try:
801 return all[key] 799 return all_refs[key]
802 except KeyError: 800 except KeyError:
803 return None 801 return None
804 802
805 def CleanPublishedCache(self, all=None): 803 def CleanPublishedCache(self, all_refs=None):
806 """Prunes any stale published refs. 804 """Prunes any stale published refs.
807 """ 805 """
808 if all is None: 806 if all_refs is None:
809 all = self._allrefs 807 all_refs = self._allrefs
810 heads = set() 808 heads = set()
811 canrm = {} 809 canrm = {}
812 for name, id in all.iteritems(): 810 for name, ref_id in all_refs.iteritems():
813 if name.startswith(R_HEADS): 811 if name.startswith(R_HEADS):
814 heads.add(name) 812 heads.add(name)
815 elif name.startswith(R_PUB): 813 elif name.startswith(R_PUB):
816 canrm[name] = id 814 canrm[name] = ref_id
817 815
818 for name, id in canrm.iteritems(): 816 for name, ref_id in canrm.iteritems():
819 n = name[len(R_PUB):] 817 n = name[len(R_PUB):]
820 if R_HEADS + n not in heads: 818 if R_HEADS + n not in heads:
821 self.bare_git.DeleteRef(name, id) 819 self.bare_git.DeleteRef(name, ref_id)
822 820
823 def GetUploadableBranches(self, selected_branch=None): 821 def GetUploadableBranches(self, selected_branch=None):
824 """List any branches which can be uploaded for review. 822 """List any branches which can be uploaded for review.
@@ -826,15 +824,15 @@ class Project(object):
826 heads = {} 824 heads = {}
827 pubed = {} 825 pubed = {}
828 826
829 for name, id in self._allrefs.iteritems(): 827 for name, ref_id in self._allrefs.iteritems():
830 if name.startswith(R_HEADS): 828 if name.startswith(R_HEADS):
831 heads[name[len(R_HEADS):]] = id 829 heads[name[len(R_HEADS):]] = ref_id
832 elif name.startswith(R_PUB): 830 elif name.startswith(R_PUB):
833 pubed[name[len(R_PUB):]] = id 831 pubed[name[len(R_PUB):]] = ref_id
834 832
835 ready = [] 833 ready = []
836 for branch, id in heads.iteritems(): 834 for branch, ref_id in heads.iteritems():
837 if branch in pubed and pubed[branch] == id: 835 if branch in pubed and pubed[branch] == ref_id:
838 continue 836 continue
839 if selected_branch and branch != selected_branch: 837 if selected_branch and branch != selected_branch:
840 continue 838 continue
@@ -978,18 +976,18 @@ class Project(object):
978 self._InitHooks() 976 self._InitHooks()
979 977
980 def _CopyFiles(self): 978 def _CopyFiles(self):
981 for file in self.copyfiles: 979 for copyfile in self.copyfiles:
982 file._Copy() 980 copyfile._Copy()
983 981
984 def GetRevisionId(self, all=None): 982 def GetRevisionId(self, all_refs=None):
985 if self.revisionId: 983 if self.revisionId:
986 return self.revisionId 984 return self.revisionId
987 985
988 rem = self.GetRemote(self.remote.name) 986 rem = self.GetRemote(self.remote.name)
989 rev = rem.ToLocal(self.revisionExpr) 987 rev = rem.ToLocal(self.revisionExpr)
990 988
991 if all is not None and rev in all: 989 if all_refs is not None and rev in all_refs:
992 return all[rev] 990 return all_refs[rev]
993 991
994 try: 992 try:
995 return self.bare_git.rev_parse('--verify', '%s^0' % rev) 993 return self.bare_git.rev_parse('--verify', '%s^0' % rev)
@@ -1002,16 +1000,16 @@ class Project(object):
1002 """Perform only the local IO portion of the sync process. 1000 """Perform only the local IO portion of the sync process.
1003 Network access is not required. 1001 Network access is not required.
1004 """ 1002 """
1005 all = self.bare_ref.all 1003 all_refs = self.bare_ref.all
1006 self.CleanPublishedCache(all) 1004 self.CleanPublishedCache(all_refs)
1007 revid = self.GetRevisionId(all) 1005 revid = self.GetRevisionId(all_refs)
1008 1006
1009 self._InitWorkTree() 1007 self._InitWorkTree()
1010 head = self.work_git.GetHead() 1008 head = self.work_git.GetHead()
1011 if head.startswith(R_HEADS): 1009 if head.startswith(R_HEADS):
1012 branch = head[len(R_HEADS):] 1010 branch = head[len(R_HEADS):]
1013 try: 1011 try:
1014 head = all[head] 1012 head = all_refs[head]
1015 except KeyError: 1013 except KeyError:
1016 head = None 1014 head = None
1017 else: 1015 else:
@@ -1067,7 +1065,7 @@ class Project(object):
1067 return 1065 return
1068 1066
1069 upstream_gain = self._revlist(not_rev(HEAD), revid) 1067 upstream_gain = self._revlist(not_rev(HEAD), revid)
1070 pub = self.WasPublished(branch.name, all) 1068 pub = self.WasPublished(branch.name, all_refs)
1071 if pub: 1069 if pub:
1072 not_merged = self._revlist(not_rev(revid), pub) 1070 not_merged = self._revlist(not_rev(revid), pub)
1073 if not_merged: 1071 if not_merged:
@@ -1190,8 +1188,8 @@ class Project(object):
1190 if head == (R_HEADS + name): 1188 if head == (R_HEADS + name):
1191 return True 1189 return True
1192 1190
1193 all = self.bare_ref.all 1191 all_refs = self.bare_ref.all
1194 if (R_HEADS + name) in all: 1192 if (R_HEADS + name) in all_refs:
1195 return GitCommand(self, 1193 return GitCommand(self,
1196 ['checkout', name, '--'], 1194 ['checkout', name, '--'],
1197 capture_stdout = True, 1195 capture_stdout = True,
@@ -1200,11 +1198,11 @@ class Project(object):
1200 branch = self.GetBranch(name) 1198 branch = self.GetBranch(name)
1201 branch.remote = self.GetRemote(self.remote.name) 1199 branch.remote = self.GetRemote(self.remote.name)
1202 branch.merge = self.revisionExpr 1200 branch.merge = self.revisionExpr
1203 revid = self.GetRevisionId(all) 1201 revid = self.GetRevisionId(all_refs)
1204 1202
1205 if head.startswith(R_HEADS): 1203 if head.startswith(R_HEADS):
1206 try: 1204 try:
1207 head = all[head] 1205 head = all_refs[head]
1208 except KeyError: 1206 except KeyError:
1209 head = None 1207 head = None
1210 1208
@@ -1245,9 +1243,9 @@ class Project(object):
1245 # 1243 #
1246 return True 1244 return True
1247 1245
1248 all = self.bare_ref.all 1246 all_refs = self.bare_ref.all
1249 try: 1247 try:
1250 revid = all[rev] 1248 revid = all_refs[rev]
1251 except KeyError: 1249 except KeyError:
1252 # Branch does not exist in this project 1250 # Branch does not exist in this project
1253 # 1251 #
@@ -1255,7 +1253,7 @@ class Project(object):
1255 1253
1256 if head.startswith(R_HEADS): 1254 if head.startswith(R_HEADS):
1257 try: 1255 try:
1258 head = all[head] 1256 head = all_refs[head]
1259 except KeyError: 1257 except KeyError:
1260 head = None 1258 head = None
1261 1259
@@ -1283,8 +1281,8 @@ class Project(object):
1283 didn't exist. 1281 didn't exist.
1284 """ 1282 """
1285 rev = R_HEADS + name 1283 rev = R_HEADS + name
1286 all = self.bare_ref.all 1284 all_refs = self.bare_ref.all
1287 if rev not in all: 1285 if rev not in all_refs:
1288 # Doesn't exist 1286 # Doesn't exist
1289 return None 1287 return None
1290 1288
@@ -1293,9 +1291,9 @@ class Project(object):
1293 # We can't destroy the branch while we are sitting 1291 # We can't destroy the branch while we are sitting
1294 # on it. Switch to a detached HEAD. 1292 # on it. Switch to a detached HEAD.
1295 # 1293 #
1296 head = all[head] 1294 head = all_refs[head]
1297 1295
1298 revid = self.GetRevisionId(all) 1296 revid = self.GetRevisionId(all_refs)
1299 if head == revid: 1297 if head == revid:
1300 _lwrite(os.path.join(self.worktree, '.git', HEAD), 1298 _lwrite(os.path.join(self.worktree, '.git', HEAD),
1301 '%s\n' % revid) 1299 '%s\n' % revid)
@@ -1412,33 +1410,33 @@ class Project(object):
1412 packed_refs = os.path.join(self.gitdir, 'packed-refs') 1410 packed_refs = os.path.join(self.gitdir, 'packed-refs')
1413 remote = self.GetRemote(name) 1411 remote = self.GetRemote(name)
1414 1412
1415 all = self.bare_ref.all 1413 all_refs = self.bare_ref.all
1416 ids = set(all.values()) 1414 ids = set(all_refs.values())
1417 tmp = set() 1415 tmp = set()
1418 1416
1419 for r, id in GitRefs(ref_dir).all.iteritems(): 1417 for r, ref_id in GitRefs(ref_dir).all.iteritems():
1420 if r not in all: 1418 if r not in all_refs:
1421 if r.startswith(R_TAGS) or remote.WritesTo(r): 1419 if r.startswith(R_TAGS) or remote.WritesTo(r):
1422 all[r] = id 1420 all_refs[r] = ref_id
1423 ids.add(id) 1421 ids.add(ref_id)
1424 continue 1422 continue
1425 1423
1426 if id in ids: 1424 if ref_id in ids:
1427 continue 1425 continue
1428 1426
1429 r = 'refs/_alt/%s' % id 1427 r = 'refs/_alt/%s' % ref_id
1430 all[r] = id 1428 all_refs[r] = ref_id
1431 ids.add(id) 1429 ids.add(ref_id)
1432 tmp.add(r) 1430 tmp.add(r)
1433 1431
1434 ref_names = list(all.keys()) 1432 ref_names = list(all_refs.keys())
1435 ref_names.sort() 1433 ref_names.sort()
1436 1434
1437 tmp_packed = '' 1435 tmp_packed = ''
1438 old_packed = '' 1436 old_packed = ''
1439 1437
1440 for r in ref_names: 1438 for r in ref_names:
1441 line = '%s %s\n' % (all[r], r) 1439 line = '%s %s\n' % (all_refs[r], r)
1442 tmp_packed += line 1440 tmp_packed += line
1443 if r not in tmp: 1441 if r not in tmp:
1444 old_packed += line 1442 old_packed += line
@@ -1477,7 +1475,7 @@ class Project(object):
1477 cmd.append((u'+refs/heads/%s:' % branch) + remote.ToLocal('refs/heads/%s' % branch)) 1475 cmd.append((u'+refs/heads/%s:' % branch) + remote.ToLocal('refs/heads/%s' % branch))
1478 1476
1479 ok = False 1477 ok = False
1480 for i in range(2): 1478 for _i in range(2):
1481 ret = GitCommand(self, cmd, bare=True, ssh_proxy=ssh_proxy).Wait() 1479 ret = GitCommand(self, cmd, bare=True, ssh_proxy=ssh_proxy).Wait()
1482 if ret == 0: 1480 if ret == 0:
1483 ok = True 1481 ok = True
@@ -2034,7 +2032,7 @@ class _Later(object):
2034 self.action() 2032 self.action()
2035 out.nl() 2033 out.nl()
2036 return True 2034 return True
2037 except GitError, e: 2035 except GitError:
2038 out.nl() 2036 out.nl()
2039 return False 2037 return False
2040 2038
@@ -2104,7 +2102,6 @@ class MetaProject(Project):
2104 """A special project housed under .repo. 2102 """A special project housed under .repo.
2105 """ 2103 """
2106 def __init__(self, manifest, name, gitdir, worktree): 2104 def __init__(self, manifest, name, gitdir, worktree):
2107 repodir = manifest.repodir
2108 Project.__init__(self, 2105 Project.__init__(self,
2109 manifest = manifest, 2106 manifest = manifest,
2110 name = name, 2107 name = name,
@@ -2156,12 +2153,12 @@ class MetaProject(Project):
2156 if not self.remote or not self.revisionExpr: 2153 if not self.remote or not self.revisionExpr:
2157 return False 2154 return False
2158 2155
2159 all = self.bare_ref.all 2156 all_refs = self.bare_ref.all
2160 revid = self.GetRevisionId(all) 2157 revid = self.GetRevisionId(all_refs)
2161 head = self.work_git.GetHead() 2158 head = self.work_git.GetHead()
2162 if head.startswith(R_HEADS): 2159 if head.startswith(R_HEADS):
2163 try: 2160 try:
2164 head = all[head] 2161 head = all_refs[head]
2165 except KeyError: 2162 except KeyError:
2166 head = None 2163 head = None
2167 2164