diff options
author | Theodore Dubois <tbodt@google.com> | 2019-07-30 12:14:25 -0700 |
---|---|---|
committer | Mike Frysinger <vapier@google.com> | 2019-09-04 04:34:50 +0000 |
commit | 60fdc5cad126fb5664ee957b91edd1c304bfc513 (patch) | |
tree | 0fff7d8a99ee6e25189147610b26acf2707989dc | |
parent | 46702eddc7b5f38391e121e47f0ab4dbd6fbdf58 (diff) | |
download | git-repo-60fdc5cad126fb5664ee957b91edd1c304bfc513.tar.gz |
Add repo start option to create the branch based off HEAD
This makes it way easier to recover from forgetting to run repo start
before committing: just run `repo start -b new-branch`, instead of
all that tedious mucking around with reflogs.
Change-Id: I56d49dce5d027e28fbba0507ac10cd763ccfc36d
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/232712
Reviewed-by: Mike Frysinger <vapier@google.com>
Reviewed-by: David Pursehouse <dpursehouse@collab.net>
Tested-by: Mike Frysinger <vapier@google.com>
-rwxr-xr-x | project.py | 8 | ||||
-rw-r--r-- | subcmds/start.py | 7 |
2 files changed, 12 insertions, 3 deletions
@@ -1697,7 +1697,7 @@ class Project(object): | |||
1697 | 1697 | ||
1698 | # Branch Management ## | 1698 | # Branch Management ## |
1699 | 1699 | ||
1700 | def StartBranch(self, name, branch_merge=''): | 1700 | def StartBranch(self, name, branch_merge='', revision=None): |
1701 | """Create a new branch off the manifest's revision. | 1701 | """Create a new branch off the manifest's revision. |
1702 | """ | 1702 | """ |
1703 | if not branch_merge: | 1703 | if not branch_merge: |
@@ -1718,7 +1718,11 @@ class Project(object): | |||
1718 | branch.merge = branch_merge | 1718 | branch.merge = branch_merge |
1719 | if not branch.merge.startswith('refs/') and not ID_RE.match(branch_merge): | 1719 | if not branch.merge.startswith('refs/') and not ID_RE.match(branch_merge): |
1720 | branch.merge = R_HEADS + branch_merge | 1720 | branch.merge = R_HEADS + branch_merge |
1721 | revid = self.GetRevisionId(all_refs) | 1721 | |
1722 | if revision is None: | ||
1723 | revid = self.GetRevisionId(all_refs) | ||
1724 | else: | ||
1725 | revid = self.work_git.rev_parse(revision) | ||
1722 | 1726 | ||
1723 | if head.startswith(R_HEADS): | 1727 | if head.startswith(R_HEADS): |
1724 | try: | 1728 | try: |
diff --git a/subcmds/start.py b/subcmds/start.py index 5d4c9c01..6ec0b2ce 100644 --- a/subcmds/start.py +++ b/subcmds/start.py | |||
@@ -40,6 +40,10 @@ revision specified in the manifest. | |||
40 | p.add_option('--all', | 40 | p.add_option('--all', |
41 | dest='all', action='store_true', | 41 | dest='all', action='store_true', |
42 | help='begin branch in all projects') | 42 | help='begin branch in all projects') |
43 | p.add_option('-r', '--rev', '--revision', dest='revision', | ||
44 | help='point branch at this revision instead of upstream') | ||
45 | p.add_option('--head', dest='revision', action='store_const', const='HEAD', | ||
46 | help='abbreviation for --rev HEAD') | ||
43 | 47 | ||
44 | def ValidateOptions(self, opt, args): | 48 | def ValidateOptions(self, opt, args): |
45 | if not args: | 49 | if not args: |
@@ -108,7 +112,8 @@ revision specified in the manifest. | |||
108 | else: | 112 | else: |
109 | branch_merge = self.manifest.default.revisionExpr | 113 | branch_merge = self.manifest.default.revisionExpr |
110 | 114 | ||
111 | if not project.StartBranch(nb, branch_merge=branch_merge): | 115 | if not project.StartBranch( |
116 | nb, branch_merge=branch_merge, revision=opt.revision): | ||
112 | err.append(project) | 117 | err.append(project) |
113 | pm.end() | 118 | pm.end() |
114 | 119 | ||