[devscripts] 03/04: git-deborig: Refactor to permit archiving branches

Sean Whitton spw-guest at moszumanska.debian.org
Fri Jan 6 17:15:55 UTC 2017


This is an automated email from the git hooks/post-receive script.

spw-guest pushed a commit to branch master
in repository devscripts.

commit 8d601273b3c908a72530c887bb59685c8a1024e7
Author: Sean Whitton <spwhitton at spwhitton.name>
Date:   Fri Jan 6 10:12:39 2017 -0700

    git-deborig: Refactor to permit archiving branches
    
    git-archive(1) can archive both branches and tags.  Refactor the script
    so that when the user manually specifies what they want to archive, it
    can be a tag or a branch.
    
    When the user does not specify what to archive, we still consider only
    tags.  Branch heads move, and the script should be idempotent unless
    instructed.
    
    Signed-off-by: Sean Whitton <spwhitton at spwhitton.name>
---
 scripts/git-deborig.pl | 47 ++++++++++++++++++++++++-----------------------
 1 file changed, 24 insertions(+), 23 deletions(-)

diff --git a/scripts/git-deborig.pl b/scripts/git-deborig.pl
index 112840b..534f724 100755
--- a/scripts/git-deborig.pl
+++ b/scripts/git-deborig.pl
@@ -23,18 +23,18 @@ git-deborig - try to produce Debian orig.tar using git-archive(1)
 
 =head1 SYNOPSIS
 
-B<git deborig> [B<-f>] [I<TAG>]
+B<git deborig> [B<-f>] [I<REF>]
 
 =head1 DESCRIPTION
 
 B<git-deborig> tries to produce the orig.tar you need for your upload
-by calling git-archive(1) on an existing git tag.  It was written with
-the dgit-maint-merge(7) workflow in mind, but can be used with other
-workflows.
+by calling git-archive(1) on an existing git tag or branch head.  It
+was written with the dgit-maint-merge(7) workflow in mind, but can be
+used with other workflows.
 
 B<git-deborig> will try several common tag names.  If this fails, or
 if more than one of those common tags are present, you can specify the
-tag to archive on the command line.
+tag or branch head to archive on the command line (I<REF> above).
 
 B<git-deborig> should be invoked from the root of the git repository,
 which should contain I<debian/changelog>.
@@ -74,15 +74,15 @@ die "pwd doesn't look like a Debian source package in a git repository ..\n"
   unless ( -d ".git" && -e "debian/changelog" );
 
 # Process command line args
-die "usage: git deborig [-f] [TAG]\n"
+die "usage: git deborig [-f] [REF]\n"
   if ( scalar @ARGV >= 3 || (scalar @ARGV == 2 && !("-f" ~~ @ARGV)) );
 my $overwrite = 0;
-my $user_tag;
+my $user_ref;
 foreach my $arg ( @ARGV ) {
     if ( $arg eq "-f" ) {
         $overwrite = 1;
     } else {
-        $user_tag = $arg;
+        $user_ref = $arg;
     }
 }
 
@@ -115,21 +115,20 @@ my $orig = "../${source}_$upstream_version.orig.tar.$compression";
 die "$orig already exists: not overwriting without -f\n"
   if ( -e $orig && ! $overwrite );
 
-# Get available git tags
-my $git = Git::Wrapper->new(".");
-my @all_tags = $git->tag();
+if ( defined $user_ref ) {      # User told us the tag/branch to archive
+    # We leave it to git-archive(1) to determine whether or not this
+    # ref exists; this keeps us forward-compatible
+    archive_ref($user_ref);
+} else {    # User didn't specify a tag/branch to archive
+    # Get available git tags
+    my $git = Git::Wrapper->new(".");
+    my @all_tags = $git->tag();
 
-if ( defined $user_tag ) {      # User told us the tag to archive
-    if ( $user_tag ~~ @all_tags ) {
-        archive_tag($user_tag);
-    } else {
-        die "the tag $user_tag does not exist in this repository\n";
-    }
-} else {    # User didn't specify a tag to archive
     # convert according to DEP-14 rules
     my $git_upstream_version = $upstream_version;
     $git_upstream_version =~ y/:~/%_/;
     $git_upstream_version =~ s/\.(?=\.|$|lock$)/.#/g;
+
     # See which candidate version tags are present in the repo
     my @candidate_tags = ("$git_upstream_version",
                           "v$git_upstream_version",
@@ -145,16 +144,18 @@ if ( defined $user_tag ) {      # User told us the tag to archive
         print "tell me which one you want to make an orig.tar from: git deborig TAG\n";
         exit 1;
     } elsif ( scalar @version_tags < 1 ) {
-        die "couldn't find any of the following tags: ",
+        print "couldn't find any of the following tags: ",
           join(", ", @candidate_tags), "\n";
+        print "tell me a tag or branch head to make an orig.tar from: git deborig REF\n";
+        exit 1;
     } else {
         my $tag = shift @version_tags;
-        archive_tag($tag);
+        archive_ref($tag);
     }
 }
 
-sub archive_tag {
-    my $tag = shift;
+sub archive_ref {
+    my $ref = shift;
 
     # For compatibility with dgit, we have to override any
     # export-subst and export-ignore git attributes that might be set
@@ -172,7 +173,7 @@ sub archive_tag {
 
     spawn(exec => ['git', '-c', "tar.tar.${compression}.command=${compressor}",
                    'archive', "--prefix=${source}-${upstream_version}/",
-                   '-o', $orig, $tag],
+                   '-o', $orig, $ref],
           to_file => $orig,
           wait_child => 1,
           nocheck => 1);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/devscripts.git



More information about the devscripts-devel mailing list