summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2018-06-17 13:04:39 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2018-06-17 13:14:21 +0100
commitedc1cd049cfa01e7d6249ea199725d2448858704 (patch)
tree19b33409c2401b5799a7a81dd573f09077b0eed1
parent1e87a7002be126e23144cd2b0a43271e522a75e7 (diff)
git-debrebase: Use git-deborig style upstream commitish finding
As discussed in email with Sean. We could use git-deborig --just-print --version= but its error handling is rather troublesome. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
-rwxr-xr-xgit-debrebase18
-rw-r--r--git-debrebase.1.pod5
-rwxr-xr-xtests/tests/gdr-newupstream-v07
3 files changed, 27 insertions, 3 deletions
diff --git a/git-debrebase b/git-debrebase
index 769b9b9..3de0aa9 100755
--- a/git-debrebase
+++ b/git-debrebase
@@ -1140,7 +1140,23 @@ sub cmd_new_upstream_v0 () {
my $new_version = (new Dpkg::Version scalar(shift @ARGV), check => 1);
my $new_upstream_version = $new_version->version();
- my $new_upstream = git_rev_parse (shift @ARGV // 'upstream');
+ my $new_upstream = shift @ARGV;
+ if (!defined $new_upstream) {
+ my @tried;
+ # todo: at some point maybe use git-deborig to do this
+ foreach my $tagpfx ('', 'v', 'upstream/') {
+ my $tag = $tagpfx.(dep14_version_mangle $new_upstream_version);
+ $new_upstream = git_get_ref "refs/tags/$tag";
+ last if length $new_upstream;
+ push @tried, $tag;
+ }
+ if (!length $new_upstream) {
+ fail "Could not determine appropriate upstream commitish.\n".
+ " (Tried these tags: @tried)\n".
+ " Check version, and specify upstream commitish explicitly.";
+ }
+ }
+ $new_upstream = git_rev_parse $new_upstream;
record_ffq_auto();
diff --git a/git-debrebase.1.pod b/git-debrebase.1.pod
index 4d4c85a..f17f1d6 100644
--- a/git-debrebase.1.pod
+++ b/git-debrebase.1.pod
@@ -142,7 +142,10 @@ The <upstream-details> are, optionally, in order:
=item <upstream-commit-ish>
The new upstream branch (or commit-ish).
-Default is C<upstream>.
+The default is to look for one of these tags, in this order:
+U vU upstream/U;
+where U is the new upstream version.
+(This is the same algorithm as L<git-deborig(1)>.)
It is a snag if the upstream contains a debian/ directory;
if forced to proceed,
diff --git a/tests/tests/gdr-newupstream-v0 b/tests/tests/gdr-newupstream-v0
index 9b283c0..485c808 100755
--- a/tests/tests/gdr-newupstream-v0
+++ b/tests/tests/gdr-newupstream-v0
@@ -30,6 +30,11 @@ v=2.1-1
git checkout master
+t-expect-fail F:'Could not determine appropriate upstream commitish' \
+t-git-debrebase new-upstream-v0 $v
+
+git tag v2.1 upstream
+
t-git-debrebase new-upstream-v0 $v
t-gdr-good laundered
@@ -49,7 +54,7 @@ anchor=$(perl <../anal.anch -ne '
exit;
')
-t-git-debrebase --anchor=$anchor -fanchor-treated new-upstream-v0 $v
+t-git-debrebase --anchor=$anchor -fanchor-treated new-upstream-v0 $v upstream
t-gdr-good laundered
t-git-debrebase stitch