summaryrefslogtreecommitdiffstats
path: root/project.py
diff options
context:
space:
mode:
Diffstat (limited to 'project.py')
-rw-r--r--project.py69
1 files changed, 44 insertions, 25 deletions
diff --git a/project.py b/project.py
index 792ad4c4..516d3b6c 100644
--- a/project.py
+++ b/project.py
@@ -36,6 +36,11 @@ from trace import IsTrace, Trace
36 36
37from git_refs import GitRefs, HEAD, R_HEADS, R_TAGS, R_PUB, R_M 37from git_refs import GitRefs, HEAD, R_HEADS, R_TAGS, R_PUB, R_M
38 38
39try:
40 input = raw_input
41except NameError:
42 pass
43
39def _lwrite(path, content): 44def _lwrite(path, content):
40 lock = '%s.lock' % path 45 lock = '%s.lock' % path
41 46
@@ -78,7 +83,7 @@ def _ProjectHooks():
78 if _project_hook_list is None: 83 if _project_hook_list is None:
79 d = os.path.abspath(os.path.dirname(__file__)) 84 d = os.path.abspath(os.path.dirname(__file__))
80 d = os.path.join(d , 'hooks') 85 d = os.path.join(d , 'hooks')
81 _project_hook_list = map(lambda x: os.path.join(d, x), os.listdir(d)) 86 _project_hook_list = [os.path.join(d, x) for x in os.listdir(d)]
82 return _project_hook_list 87 return _project_hook_list
83 88
84 89
@@ -361,7 +366,7 @@ class RepoHook(object):
361 'Do you want to allow this script to run ' 366 'Do you want to allow this script to run '
362 '(yes/yes-never-ask-again/NO)? ') % ( 367 '(yes/yes-never-ask-again/NO)? ') % (
363 self._GetMustVerb(), self._script_fullpath) 368 self._GetMustVerb(), self._script_fullpath)
364 response = raw_input(prompt).lower() 369 response = input(prompt).lower()
365 print() 370 print()
366 371
367 # User is doing a one-time approval. 372 # User is doing a one-time approval.
@@ -488,6 +493,7 @@ class Project(object):
488 groups = None, 493 groups = None,
489 sync_c = False, 494 sync_c = False,
490 sync_s = False, 495 sync_s = False,
496 clone_depth = None,
491 upstream = None, 497 upstream = None,
492 parent = None, 498 parent = None,
493 is_derived = False): 499 is_derived = False):
@@ -533,6 +539,7 @@ class Project(object):
533 self.groups = groups 539 self.groups = groups
534 self.sync_c = sync_c 540 self.sync_c = sync_c
535 self.sync_s = sync_s 541 self.sync_s = sync_s
542 self.clone_depth = clone_depth
536 self.upstream = upstream 543 self.upstream = upstream
537 self.parent = parent 544 self.parent = parent
538 self.is_derived = is_derived 545 self.is_derived = is_derived
@@ -644,7 +651,7 @@ class Project(object):
644 all_refs = self._allrefs 651 all_refs = self._allrefs
645 heads = {} 652 heads = {}
646 653
647 for name, ref_id in all_refs.iteritems(): 654 for name, ref_id in all_refs.items():
648 if name.startswith(R_HEADS): 655 if name.startswith(R_HEADS):
649 name = name[len(R_HEADS):] 656 name = name[len(R_HEADS):]
650 b = self.GetBranch(name) 657 b = self.GetBranch(name)
@@ -653,7 +660,7 @@ class Project(object):
653 b.revision = ref_id 660 b.revision = ref_id
654 heads[name] = b 661 heads[name] = b
655 662
656 for name, ref_id in all_refs.iteritems(): 663 for name, ref_id in all_refs.items():
657 if name.startswith(R_PUB): 664 if name.startswith(R_PUB):
658 name = name[len(R_PUB):] 665 name = name[len(R_PUB):]
659 b = heads.get(name) 666 b = heads.get(name)
@@ -672,9 +679,14 @@ class Project(object):
672 project_groups: "all,group1,group2" 679 project_groups: "all,group1,group2"
673 manifest_groups: "-group1,group2" 680 manifest_groups: "-group1,group2"
674 the project will be matched. 681 the project will be matched.
682
683 The special manifest group "default" will match any project that
684 does not have the special project group "notdefault"
675 """ 685 """
676 expanded_manifest_groups = manifest_groups or ['all', '-notdefault'] 686 expanded_manifest_groups = manifest_groups or ['default']
677 expanded_project_groups = ['all'] + (self.groups or []) 687 expanded_project_groups = ['all'] + (self.groups or [])
688 if not 'notdefault' in expanded_project_groups:
689 expanded_project_groups += ['default']
678 690
679 matched = False 691 matched = False
680 for group in expanded_manifest_groups: 692 for group in expanded_manifest_groups:
@@ -754,10 +766,7 @@ class Project(object):
754 paths.extend(df.keys()) 766 paths.extend(df.keys())
755 paths.extend(do) 767 paths.extend(do)
756 768
757 paths = list(set(paths)) 769 for p in sorted(set(paths)):
758 paths.sort()
759
760 for p in paths:
761 try: 770 try:
762 i = di[p] 771 i = di[p]
763 except KeyError: 772 except KeyError:
@@ -849,13 +858,13 @@ class Project(object):
849 all_refs = self._allrefs 858 all_refs = self._allrefs
850 heads = set() 859 heads = set()
851 canrm = {} 860 canrm = {}
852 for name, ref_id in all_refs.iteritems(): 861 for name, ref_id in all_refs.items():
853 if name.startswith(R_HEADS): 862 if name.startswith(R_HEADS):
854 heads.add(name) 863 heads.add(name)
855 elif name.startswith(R_PUB): 864 elif name.startswith(R_PUB):
856 canrm[name] = ref_id 865 canrm[name] = ref_id
857 866
858 for name, ref_id in canrm.iteritems(): 867 for name, ref_id in canrm.items():
859 n = name[len(R_PUB):] 868 n = name[len(R_PUB):]
860 if R_HEADS + n not in heads: 869 if R_HEADS + n not in heads:
861 self.bare_git.DeleteRef(name, ref_id) 870 self.bare_git.DeleteRef(name, ref_id)
@@ -866,14 +875,14 @@ class Project(object):
866 heads = {} 875 heads = {}
867 pubed = {} 876 pubed = {}
868 877
869 for name, ref_id in self._allrefs.iteritems(): 878 for name, ref_id in self._allrefs.items():
870 if name.startswith(R_HEADS): 879 if name.startswith(R_HEADS):
871 heads[name[len(R_HEADS):]] = ref_id 880 heads[name[len(R_HEADS):]] = ref_id
872 elif name.startswith(R_PUB): 881 elif name.startswith(R_PUB):
873 pubed[name[len(R_PUB):]] = ref_id 882 pubed[name[len(R_PUB):]] = ref_id
874 883
875 ready = [] 884 ready = []
876 for branch, ref_id in heads.iteritems(): 885 for branch, ref_id in heads.items():
877 if branch in pubed and pubed[branch] == ref_id: 886 if branch in pubed and pubed[branch] == ref_id:
878 continue 887 continue
879 if selected_branch and branch != selected_branch: 888 if selected_branch and branch != selected_branch:
@@ -1218,7 +1227,7 @@ class Project(object):
1218 cmd = ['fetch', remote.name] 1227 cmd = ['fetch', remote.name]
1219 cmd.append('refs/changes/%2.2d/%d/%d' \ 1228 cmd.append('refs/changes/%2.2d/%d/%d' \
1220 % (change_id % 100, change_id, patch_id)) 1229 % (change_id % 100, change_id, patch_id))
1221 cmd.extend(map(str, remote.fetch)) 1230 cmd.extend(list(map(str, remote.fetch)))
1222 if GitCommand(self, cmd, bare=True).Wait() != 0: 1231 if GitCommand(self, cmd, bare=True).Wait() != 0:
1223 return None 1232 return None
1224 return DownloadedChange(self, 1233 return DownloadedChange(self,
@@ -1607,7 +1616,7 @@ class Project(object):
1607 ids = set(all_refs.values()) 1616 ids = set(all_refs.values())
1608 tmp = set() 1617 tmp = set()
1609 1618
1610 for r, ref_id in GitRefs(ref_dir).all.iteritems(): 1619 for r, ref_id in GitRefs(ref_dir).all.items():
1611 if r not in all_refs: 1620 if r not in all_refs:
1612 if r.startswith(R_TAGS) or remote.WritesTo(r): 1621 if r.startswith(R_TAGS) or remote.WritesTo(r):
1613 all_refs[r] = ref_id 1622 all_refs[r] = ref_id
@@ -1622,13 +1631,10 @@ class Project(object):
1622 ids.add(ref_id) 1631 ids.add(ref_id)
1623 tmp.add(r) 1632 tmp.add(r)
1624 1633
1625 ref_names = list(all_refs.keys())
1626 ref_names.sort()
1627
1628 tmp_packed = '' 1634 tmp_packed = ''
1629 old_packed = '' 1635 old_packed = ''
1630 1636
1631 for r in ref_names: 1637 for r in sorted(all_refs):
1632 line = '%s %s\n' % (all_refs[r], r) 1638 line = '%s %s\n' % (all_refs[r], r)
1633 tmp_packed += line 1639 tmp_packed += line
1634 if r not in tmp: 1640 if r not in tmp:
@@ -1642,7 +1648,10 @@ class Project(object):
1642 1648
1643 # The --depth option only affects the initial fetch; after that we'll do 1649 # The --depth option only affects the initial fetch; after that we'll do
1644 # full fetches of changes. 1650 # full fetches of changes.
1645 depth = self.manifest.manifestProject.config.GetString('repo.depth') 1651 if self.clone_depth:
1652 depth = self.clone_depth
1653 else:
1654 depth = self.manifest.manifestProject.config.GetString('repo.depth')
1646 if depth and initial: 1655 if depth and initial:
1647 cmd.append('--depth=%s' % depth) 1656 cmd.append('--depth=%s' % depth)
1648 1657
@@ -1654,11 +1663,13 @@ class Project(object):
1654 1663
1655 if not current_branch_only: 1664 if not current_branch_only:
1656 # Fetch whole repo 1665 # Fetch whole repo
1657 if no_tags: 1666 # If using depth then we should not get all the tags since they may
1667 # be outside of the depth.
1668 if no_tags or depth:
1658 cmd.append('--no-tags') 1669 cmd.append('--no-tags')
1659 else: 1670 else:
1660 cmd.append('--tags') 1671 cmd.append('--tags')
1661 cmd.append((u'+refs/heads/*:') + remote.ToLocal('refs/heads/*')) 1672 cmd.append(str((u'+refs/heads/*:') + remote.ToLocal('refs/heads/*')))
1662 elif tag_name is not None: 1673 elif tag_name is not None:
1663 cmd.append('tag') 1674 cmd.append('tag')
1664 cmd.append(tag_name) 1675 cmd.append(tag_name)
@@ -1668,7 +1679,7 @@ class Project(object):
1668 branch = self.upstream 1679 branch = self.upstream
1669 if branch.startswith(R_HEADS): 1680 if branch.startswith(R_HEADS):
1670 branch = branch[len(R_HEADS):] 1681 branch = branch[len(R_HEADS):]
1671 cmd.append((u'+refs/heads/%s:' % branch) + remote.ToLocal('refs/heads/%s' % branch)) 1682 cmd.append(str((u'+refs/heads/%s:' % branch) + remote.ToLocal('refs/heads/%s' % branch)))
1672 1683
1673 ok = False 1684 ok = False
1674 for _i in range(2): 1685 for _i in range(2):
@@ -1702,7 +1713,7 @@ class Project(object):
1702 return ok 1713 return ok
1703 1714
1704 def _ApplyCloneBundle(self, initial=False, quiet=False): 1715 def _ApplyCloneBundle(self, initial=False, quiet=False):
1705 if initial and self.manifest.manifestProject.config.GetString('repo.depth'): 1716 if initial and (self.manifest.manifestProject.config.GetString('repo.depth') or self.clone_depth):
1706 return False 1717 return False
1707 1718
1708 remote = self.GetRemote(self.remote.name) 1719 remote = self.GetRemote(self.remote.name)
@@ -2099,6 +2110,10 @@ class Project(object):
2099 line = fd.read() 2110 line = fd.read()
2100 finally: 2111 finally:
2101 fd.close() 2112 fd.close()
2113 try:
2114 line = line.decode()
2115 except AttributeError:
2116 pass
2102 if line.startswith('ref: '): 2117 if line.startswith('ref: '):
2103 return line[5:-1] 2118 return line[5:-1]
2104 return line[:-1] 2119 return line[:-1]
@@ -2192,7 +2207,7 @@ class Project(object):
2192 if not git_require((1, 7, 2)): 2207 if not git_require((1, 7, 2)):
2193 raise ValueError('cannot set config on command line for %s()' 2208 raise ValueError('cannot set config on command line for %s()'
2194 % name) 2209 % name)
2195 for k, v in config.iteritems(): 2210 for k, v in config.items():
2196 cmdv.append('-c') 2211 cmdv.append('-c')
2197 cmdv.append('%s=%s' % (k, v)) 2212 cmdv.append('%s=%s' % (k, v))
2198 cmdv.append(name) 2213 cmdv.append(name)
@@ -2208,6 +2223,10 @@ class Project(object):
2208 name, 2223 name,
2209 p.stderr)) 2224 p.stderr))
2210 r = p.stdout 2225 r = p.stdout
2226 try:
2227 r = r.decode()
2228 except AttributeError:
2229 pass
2211 if r.endswith('\n') and r.index('\n') == len(r) - 1: 2230 if r.endswith('\n') and r.index('\n') == len(r) - 1:
2212 return r[:-1] 2231 return r[:-1]
2213 return r 2232 return r