diff options
author | Zac Livingston <zacl@codeaurora.org> | 2017-06-13 08:29:04 -0600 |
---|---|---|
committer | David Pursehouse <dpursehouse@collab.net> | 2017-08-25 09:10:29 +0900 |
commit | 9ead97bb51f5b1ad1d0a45e0c5442f15e1e38fd7 (patch) | |
tree | 4edd8cc4d061a3c8971fd6d55a547320120ad10b | |
parent | e43322625a423c2dc7aa8b0648c172ccbe7aefa7 (diff) | |
download | git-repo-9ead97bb51f5b1ad1d0a45e0c5442f15e1e38fd7.tar.gz |
When starting a branch, do not use a tag or change value for branch.merge
When starting a branch, branch.merge is set to project revision unless
the revision is a SHA1. In that case, branch.merge is set to dest_branch
if defined or manifest default revision otherwise. This special handling
allows repo upload to work when the project revision is a SHA1.
Extend the special handling to also happen when the project revision
is a tag value or a change value so that repo upload will work in those
case as well.
Change-Id: Iff81ece40e770cd02535e80dcb023564d42dcf47
-rw-r--r-- | git_config.py | 12 | ||||
-rw-r--r-- | git_refs.py | 11 | ||||
-rw-r--r-- | subcmds/start.py | 10 |
3 files changed, 21 insertions, 12 deletions
diff --git a/git_config.py b/git_config.py index e00f6be2..8c247394 100644 --- a/git_config.py +++ b/git_config.py | |||
@@ -50,16 +50,24 @@ else: | |||
50 | from git_command import GitCommand | 50 | from git_command import GitCommand |
51 | from git_command import ssh_sock | 51 | from git_command import ssh_sock |
52 | from git_command import terminate_ssh_clients | 52 | from git_command import terminate_ssh_clients |
53 | from git_refs import R_CHANGES, R_HEADS, R_TAGS | ||
53 | 54 | ||
54 | R_HEADS = 'refs/heads/' | ||
55 | R_TAGS = 'refs/tags/' | ||
56 | ID_RE = re.compile(r'^[0-9a-f]{40}$') | 55 | ID_RE = re.compile(r'^[0-9a-f]{40}$') |
57 | 56 | ||
58 | REVIEW_CACHE = dict() | 57 | REVIEW_CACHE = dict() |
59 | 58 | ||
59 | def IsChange(rev): | ||
60 | return rev.startswith(R_CHANGES) | ||
61 | |||
60 | def IsId(rev): | 62 | def IsId(rev): |
61 | return ID_RE.match(rev) | 63 | return ID_RE.match(rev) |
62 | 64 | ||
65 | def IsTag(rev): | ||
66 | return rev.startswith(R_TAGS) | ||
67 | |||
68 | def IsImmutable(rev): | ||
69 | return IsChange(rev) or IsId(rev) or IsTag(rev) | ||
70 | |||
63 | def _key(name): | 71 | def _key(name): |
64 | parts = name.split('.') | 72 | parts = name.split('.') |
65 | if len(parts) < 2: | 73 | if len(parts) < 2: |
diff --git a/git_refs.py b/git_refs.py index 3c266061..58c838a6 100644 --- a/git_refs.py +++ b/git_refs.py | |||
@@ -16,11 +16,12 @@ | |||
16 | import os | 16 | import os |
17 | from trace import Trace | 17 | from trace import Trace |
18 | 18 | ||
19 | HEAD = 'HEAD' | 19 | HEAD = 'HEAD' |
20 | R_HEADS = 'refs/heads/' | 20 | R_CHANGES = 'refs/changes/' |
21 | R_TAGS = 'refs/tags/' | 21 | R_HEADS = 'refs/heads/' |
22 | R_PUB = 'refs/published/' | 22 | R_TAGS = 'refs/tags/' |
23 | R_M = 'refs/remotes/m/' | 23 | R_PUB = 'refs/published/' |
24 | R_M = 'refs/remotes/m/' | ||
24 | 25 | ||
25 | 26 | ||
26 | class GitRefs(object): | 27 | class GitRefs(object): |
diff --git a/subcmds/start.py b/subcmds/start.py index 290b6897..c3ec303e 100644 --- a/subcmds/start.py +++ b/subcmds/start.py | |||
@@ -18,7 +18,7 @@ import os | |||
18 | import sys | 18 | import sys |
19 | 19 | ||
20 | from command import Command | 20 | from command import Command |
21 | from git_config import IsId | 21 | from git_config import IsImmutable |
22 | from git_command import git | 22 | from git_command import git |
23 | import gitc_utils | 23 | import gitc_utils |
24 | from progress import Progress | 24 | from progress import Progress |
@@ -96,11 +96,11 @@ revision specified in the manifest. | |||
96 | project.Sync_LocalHalf(sync_buf) | 96 | project.Sync_LocalHalf(sync_buf) |
97 | project.revisionId = gitc_project.old_revision | 97 | project.revisionId = gitc_project.old_revision |
98 | 98 | ||
99 | # If the current revision is a specific SHA1 then we can't push back | 99 | # If the current revision is immutable, such as a SHA1, a tag or |
100 | # to it; so substitute with dest_branch if defined, or with manifest | 100 | # a change, then we can't push back to it. Substitute with |
101 | # default revision instead. | 101 | # dest_branch, if defined; or with manifest default revision instead. |
102 | branch_merge = '' | 102 | branch_merge = '' |
103 | if IsId(project.revisionExpr): | 103 | if IsImmutable(project.revisionExpr): |
104 | if project.dest_branch: | 104 | if project.dest_branch: |
105 | branch_merge = project.dest_branch | 105 | branch_merge = project.dest_branch |
106 | else: | 106 | else: |