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: |
