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

jamessan pushed a commit to branch master
in repository devscripts.

commit 03900208f0e48daa475f409ef63997f584e41a08
Author: James McCoy <[email protected]>
Date:   Wed Sep 6 23:19:46 2017 -0400

    debcheckout: Set git's remote.<name>.pushurl for --auth
    
    This allows read-only interaction with the remote to use unauthenticated
    access, while still enabling push access.
    
    Signed-off-by: James McCoy <[email protected]>
---
 debian/changelog       |  5 +++++
 scripts/debcheckout.pl | 50 ++++++++++++++++++++++++++++++++++++++++++++------
 2 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 6416836..bb199a1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -36,6 +36,11 @@ devscripts (2.17.10) UNRELEASED; urgency=medium
       (non-dose) behavior when sources files are compressed.  (Closes:
       #698240)
     + Check Build-Depends-Arch for dependencies.
+  * debcheckout:
+    + Using --auth for git repositories now performs the clone with the
+      Vcs-Git URL, but sets remote.<name>.pushurl to the rewritten
+      authenticated URL.  Thanks to Andreas Henriksson for the patch!
+      (Closes: #753838)
 
   [ Daniel Shahaf ]
   * bts:
diff --git a/scripts/debcheckout.pl b/scripts/debcheckout.pl
index 1f61aa2..35c9bda 100755
--- a/scripts/debcheckout.pl
+++ b/scripts/debcheckout.pl
@@ -526,9 +526,9 @@ sub munge_url($$)
 }
 
 # Checkout a given repository in a given destination directory.
-sub checkout_repo($$$) {
-    my ($repo_type, $repo_url, $destdir) = @_;
-    my @cmd;
+sub checkout_repo($$$$) {
+    my ($repo_type, $repo_url, $destdir, $anon_repo_url) = @_;
+    my (@cmd, @extracmd);
 
     given ($repo_type) {
        when ("arch") { @cmd = ("tla", "grab", $repo_url); }  # XXX ???
@@ -541,11 +541,27 @@ sub checkout_repo($$$) {
        }
        when ("darcs") { @cmd = ("darcs", "get", $repo_url); }
        when ("git") {
+           my $push_url;
+
+           if (defined $anon_repo_url and length $anon_repo_url) {
+               if ($repo_url =~ m|(.*)\s+-b\s+(.*)|) {
+                   $push_url = $1;
+               } else {
+                   $push_url = $repo_url;
+               }
+
+               $repo_url = $anon_repo_url;
+           }
+
            if ($repo_url =~ m|(.*)\s+-b\s+(.*)|) {
              @cmd = ("git", "clone", $1, "-b", $2);
            } else {
              @cmd = ("git", "clone", $repo_url);
            }
+
+           if ($push_url) {
+               @extracmd = ('git', 'remote', 'set-url', '--push', 'origin', 
$push_url);
+           }
        }
        when ("hg") { @cmd = ("hg", "clone", $repo_url); }
        when ("svn") { @cmd = ("svn", "co", $repo_url); }
@@ -555,6 +571,25 @@ sub checkout_repo($$$) {
     print "@cmd ...\n";
     system @cmd;
     my $rc = $? >> 8;
+
+    if ($rc == 0 && @extracmd) {
+       my $oldcwd = getcwd();
+       my $clonedir;
+
+       print "@extracmd ...\n";
+
+       if (length $destdir) {
+           $clonedir = $destdir;
+       } else {
+           ($clonedir = $repo_url) =~ s|.*/(.*)(.git)?|$1|;
+       }
+
+       chdir $clonedir;
+       system @extracmd;
+       $rc = $? >> 8;
+       chdir($oldcwd);
+    }
+
     return $rc;
 }
 
@@ -996,6 +1031,7 @@ sub main() {
     my $use_package = ''; # use this package instead of guessing from the URL
     my $repo_type = "svn";  # default repo typo, overridden by '-t'
     my $repo_url = "";   # repository URL
+    my $anon_repo_url;    # repository URL (before auth mangling)
     my $user = "";       # login name (authenticated mode only)
     my $browse_url = "";    # online browsable repository URL
     my $git_track = "";     # list of remote GIT branches to --track
@@ -1081,8 +1117,10 @@ EOF
     }
 
     $repo_url = munge_url($repo_type, $repo_url);
-    $repo_url = set_auth($repo_type, $repo_url, $user, $dont_act)
-       if $auth and not @files;
+    if ($auth and not @files) {
+       $anon_repo_url = $repo_url;
+       $repo_url = set_auth($repo_type, $repo_url, $user, $dont_act);
+    }
     print_repo($repo_type, $repo_url) if $print_mode;          # ... then quit
     print_details($repo_type, $repo_url) if $details_mode;     # ... then quit
     if (length $pkg) {
@@ -1093,7 +1131,7 @@ EOF
     if (@files) {
        $rc = checkout_files($repo_type, $repo_url, $destdir, $browse_url);
     } else {
-       $rc = checkout_repo($repo_type, $repo_url, $destdir);
+       $rc = checkout_repo($repo_type, $repo_url, $destdir, $anon_repo_url);
     }   # XXX: there is no way to know for sure what is the destdir :-(
     die "checkout failed (the command above returned a non-zero exit code)\n"
        if $rc != 0;

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

_______________________________________________
devscripts-devel mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/devscripts-devel

Reply via email to