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

osamu pushed a commit to branch master
in repository devscripts.

commit ef1ae1f5291c7f2014e2f0e9e3fabd06eafaebb5
Merge: 59ae95f 2ea8f28
Author: Osamu Aoki <[email protected]>
Date:   Tue Nov 17 02:12:14 2015 +0900

    Merge branch 'git'
    
    Conflicts fixed:
        scripts/uscan.pl

 scripts/uscan.pl | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 86 insertions(+)

diff --cc scripts/uscan.pl
index d99cefd,b9fb2df..b0c87d2
--- a/scripts/uscan.pl
+++ b/scripts/uscan.pl
@@@ -2834,32 -961,92 +2834,89 @@@ sub process_watchline ($$$$$$
            }
        }
        if (@hrefs) {
 -          if ($verbose) {
 -              print "-- Found the following matching hrefs:\n";
 -              foreach my $href (@hrefs) { print "     $$href[1] 
($$href[0])\n"; }
 +          @hrefs = Devscripts::Versort::upstream_versort(@hrefs);
 +          my $msg = "Found the following matching hrefs on the web page 
(newest first):\n";
 +          foreach my $href (@hrefs) {
 +              $msg .= "   $$href[2] ($$href[0]) $$href[3]\n";
            }
 -          if (defined $download_version) {
 -              my @vhrefs = grep { $$_[0] eq $download_version } @hrefs;
 -              if (@vhrefs) {
 -                  ($newversion, $newfile) = @{$vhrefs[0]};
 -              } else {
 -                  warn "$progname warning: In $watchfile no matching hrefs 
for version $download_version"
 -                      . " in watch line\n  $line\n";
 -                  return 1;
 -              }
 +          uscan_verbose $msg;
 +      }
 +      if (defined $download_version) {
 +          my @vhrefs = grep { $$_[3] } @hrefs;
 +          if (@vhrefs) {
 +              ($newversion, undef, $newfile, undef) = @{$vhrefs[0]};
            } else {
 -              @hrefs = Devscripts::Versort::versort(@hrefs);
 -              ($newversion, $newfile) = @{$hrefs[0]};
 +              uscan_warn "In $watchfile no matching hrefs for version 
$download_version"
 +                  . " in watch line\n  $line\n";
 +              return 1;
            }
        } else {
 -          warn "$progname warning: In $watchfile,\n  no matching hrefs for 
watch line\n  $line\n";
 -          return 1;
 +          if (@hrefs) {
 +              ($newversion, undef, $newfile, undef) = @{$hrefs[0]};
 +          } else {
 +              uscan_warn "In $watchfile no matching files for watch line\n  
$line\n";
 +              return 1;
 +          }
        }
+     } elsif ($site =~ m%^git://%) {
+       # TODO: sanitize $base
+       open(REFS, "-|", 'git', 'ls-remote', $base) ||
+           die "$progname: you must have the git package installed\n"
+             . "to use git URLs\n";
+       my (@refs, $line, $ref, $version);
+       while (<REFS>) {
+           chomp;
+           $line = $_;
+           foreach my $_pattern (@patterns) {
+               if ($line =~
+                     m&^([^[:space:]]+)[[:space:]]+(?:refs\/)?$_pattern$&) {
+                   $ref = $1; $version = $2;
+ 
+                   $version = join(".", map { $_ if defined($_) }
+                       $version);
+                   foreach my $_p (@{$options{'uversionmangle'}}) {
+                       if (! safe_replace(\$version, $_p)) {
+                           warn "$progname: In $watchfile, potentially"
+                            . " unsafe or malformed uversionmangle"
+                            . " pattern:\n  '$_p'"
+                            . " found. Skipping watchline\n"
+                            . "  $line\n";
+                           return 1;
+                       }
+                   }
+                   push @refs, [$version, $ref];
+               }
+           }
+       }
+       if (@refs) {
 -          if ($verbose) {
 -              print "-- Found the following matching refs:\n";
 -              foreach my $ref (@refs) {
 -                  print "     $$ref[1] ($$ref[0])\n";
 -              }
++          my $msg = "Found the following matching refs:\n";
++          foreach my $ref (@refs) {
++              $msg .= "     $$ref[1] ($$ref[0])\n";
+           }
++          uscan_verbose "$msg";
+           if (defined $download_version) {
+               my @vrefs = grep { $$_[0] eq $download_version } @refs;
+               if (@vrefs) {
+                   ($newversion, $newfile) = @{$vrefs[0]};
+               } else {
+                   warn "$progname warning: In $watchfile no matching"
+                        . " refs for version $download_version"
+                        . " in watch line\n  $line\n";
+                   return 1;
+               }
+ 
+           } else {
+               @refs = Devscripts::Versort::versort(@refs);
+               ($newversion, $newfile) = @{$refs[0]};
+           }
+       } else {
+           warn "$progname warning: In $watchfile,\n" .
+                " no matching refs for watch line\n" .
+                " $line\n";
+                return 1;
+       }
 -    } else {
 -      # Better be an FTP site
 -      if ($site !~ m%^ftp://%) {
 -          warn "$progname warning: Unknown protocol in $watchfile, 
skipping:\n  $site\n";
 -          return 1;
 -      }
 -
 +    } elsif ($site =~ m%^ftp://%) {
 +      # FTP site
        if (exists $options{'pasv'}) {
            $ENV{'FTP_PASSIVE'}=$options{'pasv'};
        }
@@@ -3076,219 -1271,76 +3135,246 @@@ EO
        # FTP site
        $upstream_url = "$base$newfile";
      }
 +    uscan_verbose "Upstream URL (downloadurlmangled):\n   $upstream_url\n";
  
 -    $dehs_tags{'debian-uversion'} = $lastversion;
 -    $dehs_tags{'debian-mangled-uversion'} = $mangled_lastversion;
 -    $dehs_tags{'upstream-version'} = $newversion;
 -    $dehs_tags{'upstream-url'} = $upstream_url;
 +    # $newversion = version used for pkg-ver.tar.gz and version comparison
 +    uscan_verbose "Newest upstream tarball version selected for download 
(uversionmangled): $newversion\n" if $newversion;
  
 -    # Can't just use $lastversion eq $newversion, as then 0.01 and 0.1
 -    # compare different, whereas they are treated as equal by dpkg
 -    if (system("dpkg", "--compare-versions", "$mangled_lastversion", "eq", 
"$newversion") == 0) {
 -      if ($verbose or ($download == 0 and $report and ! $dehs)) {
 -          print $pkg_report_header;
 -          $pkg_report_header = '';
 -          print "Newest version on remote site is $newversion, local version 
is $lastversion\n" .
 -              ($mangled_lastversion eq $lastversion ? "" : " (mangled local 
version number $mangled_lastversion)\n");
 -          print " => Package is up to date\n";
 -      }
 -      $dehs_tags{'status'} = "up to date";
 -      if (! $force_download) {
 -          return 0;
 +    my $newfile_base;
 +    if (exists $options{'filenamemangle'}) {
 +      if ($versionless) {
 +          $newfile_base = $upstream_url;
        } else {
 -          $download = 1;
 +          $newfile_base = $newfile;
 +      }
 +      uscan_verbose "Matching target for filenamemangle: $newfile_base\n";
 +      foreach my $pat (@{$options{'filenamemangle'}}) {
 +          uscan_verbose "filenamemangle rule $pat\n";
 +          if (! safe_replace(\$newfile_base, $pat)) {
 +              uscan_warn "In $watchfile, potentially"
 +              . " unsafe or malformed filenamemangle"
 +              . " pattern:\n  '$pat'"
 +              . " found. Skipping watchline\n"
 +              . "  $line\n";
 +          return 1;
 +          }
 +      }
 +      unless ($newversion) {
 +          # uversionmanglesd version is '', make best effort to set it
 +          $newfile_base =~ m/^.+[-_]([^-_]+)(?:\.tar\.(gz|bz2|xz)|\.zip)$/i;
 +          $newversion = $1;
 +          unless ($newversion) {
 +              uscan_warn "Fix filenamemangle to produce a filename with the 
correct version\n";
 +              return 1;
 +          }
 +          uscan_verbose "Newest upstream tarball version from the 
filenamemangled filename: $newversion\n";
 +      }
 +    } else {
 +      $newfile_base = basename($newfile);
 +      # Remove HTTP header trash
 +      if ($site =~ m%^https?://%) {
 +          $newfile_base =~ s/[\?#].*$//; # PiPy
 +          # just in case this leaves us with nothing
 +          if ($newfile_base eq '') {
 +              uscan_warn "No good upstream filename found after removing 
tailing ?... and #....\n   Use filenamemangle to fix this.\n";
 +              return 1;
 +          }
++      } elsif ($site =~ m%^git://%) {
++          # Default name for git archive
++          my $ext = "tar.xz";
++          if ($repack) {
++              $ext = "tar.gz";
++          }
++          $newfile_base = "$pkg-$newversion.$ext";
        }
      }
 +    uscan_verbose "Download filename (filenamemangled): $newfile_base\n";
 +    unless (defined $common_newversion) {
 +      $common_newversion = $newversion;
 +    }
 +
 +    $dehs_tags{'debian-uversion'} = $lastversion;
 +    $dehs_tags{'debian-mangled-uversion'} = $mangled_lastversion;
 +    $dehs_tags{'upstream-version'} = $newversion;
 +    $dehs_tags{'upstream-url'} = $upstream_url;
  
 -    # In all other cases, we'll want to report information even with --report
 -    if ($verbose or ($download == 0 and ! $dehs)) {
 -      print $pkg_report_header;
 -      $pkg_report_header = '';
 -      print "Newest version on remote site is $newversion, local version is 
$lastversion\n" .
 -          ($mangled_lastversion eq $lastversion ? "" : " (mangled local 
version number $mangled_lastversion)\n");
 +    my $compver;
 +    if (system("dpkg", "--compare-versions", "1:${mangled_lastversion}-0", 
"eq", "1:${newversion}-0") >> 8 == 0) {
 +      $compver = 'same';  # ${mangled_lastversion} == ${newversion}
 +    } elsif (system("dpkg", "--compare-versions", 
"1:${mangled_lastversion}-0", "gt", "1:${newversion}-0") >> 8 == 0) {
 +      $compver = 'older'; # ${mangled_lastversion} >> ${newversion}
 +    } else {
 +      $compver = 'newer'; # ${mangled_lastversion} << ${newversion}
      }
  
 -    # We use dpkg's rules to determine whether our current version
 -    # is newer or older than the remote version.
 -    if (!defined $download_version) {
 -      if (system("dpkg", "--compare-versions", "$mangled_lastversion", "gt", 
"$newversion") == 0) {
 -          if ($verbose) {
 -              print " => remote site does not even have current version\n";
 -          } elsif ($dehs) {
 -              $dehs_tags{'status'} = "Debian version newer than remote site";
 -          } else {
 -              print "$pkg: remote site does not even have current version\n";
 -          }
 -          return 0;
 -      } else {
 +    # Version dependent $download adjustment
 +    if (defined $download_version) {
 +      # Pretend to found a newer upstream version to exit without error
 +      uscan_msg "Newest version on remote site is $newversion, specified 
download version is $download_version\n";
 +      $found++;
 +    } elsif ($options{'versionmode'} eq 'newer') {
 +      uscan_msg "Newest version on remote site is $newversion, local version 
is $lastversion\n" .
 +          ($mangled_lastversion eq $lastversion ? "" : " (mangled local 
version is $mangled_lastversion)\n");
 +      if ($compver eq 'newer') {
            # There's a newer upstream version available, which may already
            # be on our system or may not be
 +          uscan_msg "   => Newer package available\n";
 +          $dehs_tags{'status'} = "newer package available";
            $found++;
 +      } elsif ($compver eq 'same') {
 +          uscan_msg "   => Package is up to date\n";
 +          $dehs_tags{'status'} = "up to date";
 +          if ($download > 1) {
 +              # 2=force-download or 3=overwrite-download
 +              uscan_msg "   => Forcing download as requested\n";
 +              $found++;
 +          } else {
 +              # 0=no-download or 1=download
 +              $download = 0;
 +          }
 +      } else { # $compver eq 'old'
 +          uscan_msg "   => Only older package available\n";
 +          $dehs_tags{'status'} = "only older package available";
 +          if ($download > 1) {
 +              uscan_msg "   => Forcing download as requested\n";
 +              $found++;
 +          } else {
 +              $download = 0;
 +          }
        }
 -    } else {
 -      # Flag that we found a newer upstream version, so that the exit status
 -      # is set correctly
 +    } elsif ($options{'versionmode'} eq 'ignore') {
 +      uscan_msg "Newest version on remote site is $newversion, ignore local 
version\n";
 +      $dehs_tags{'status'} = "package available";
        $found++;
 +    } else { # same/previous -- secondary-tarball or signature-file
 +      uscan_die "strange ... <version> stanza = same/previous should have 
defined \$download_version\n";
      }
  
 -    if (defined $pkg_dir) {
 -      if (! -d "$destdir") {
 -          print "Package directory '$destdir to store downloaded file is not 
existing\n";
 -          return 1;
 +    ############################# BEGIN SUB DOWNLOAD 
##################################
 +    my $downloader = sub {
 +      my ($url, $fname) = @_;
 +      if ($url =~ m%^http(s)?://%) {
 +          if (defined($1) and !$haveSSL) {
 +              uscan_die "$progname: you must have the 
liblwp-protocol-https-perl package installed\nto use https URLs\n";
 +          }
 +          # substitute HTML entities
 +          # Is anything else than "&amp;" required?  I doubt it.
 +          uscan_verbose "Requesting URL:\n   $url\n";
 +          my $headers = HTTP::Headers->new;
 +          $headers->header('Accept' => '*/*');
 +          $headers->header('Referer' => $base);
 +          $request = HTTP::Request->new('GET', $url, $headers);
 +          $response = $user_agent->request($request, $fname);
 +          if (! $response->is_success) {
 +              if (defined $pkg_dir) {
 +                  uscan_warn "In directory $pkg_dir, downloading\n  $url 
failed: " . $response->status_line . "\n";
 +              } else {
 +                  uscan_warn "Downloading\n $url failed:\n" . 
$response->status_line . "\n";
 +              }
 +              return 0;
 +          }
++      } elsif ($url =~ m%^git://%) {
++          uscan_verbose "Requesting URL:\n   $url\n";
++          my @cmd = ('git', 'archive', '--format=tar',
++              "--prefix=$pkg-$newversion/",'--remote');
++          my @upstream_ref = split /[[:space:]]+/, $url, 2;
++          push @cmd, @upstream_ref;
++          my (undef, $fnametar) = tempfile(UNLINK => 1);
++          spawn(exec => \@cmd, to_file => $fnametar, wait_child => 1);
++          if ($repack) {
++              spawn(exec => ['gzip', '-n', '-9'],
++                    from_file => $fnametar,
++                    to_file => "$fname",
++                    wait_child => 1);
++          } else {
++              spawn(exec => ['xz', '-c'],
++                    from_file => $fnametar,
++                    to_file => "$fname",
++                    wait_child => 1);
++          }
++          uscan_verbose "Generated archive $fname from the git repository.\n";
 +      } else {
 +          # FTP site
 +          if (exists $options{'pasv'}) {
 +              $ENV{'FTP_PASSIVE'}=$options{'pasv'};
 +          }
 +          uscan_verbose "Requesting URL:\n   $url\n";
 +          $request = HTTP::Request->new('GET', "$url");
 +          $response = $user_agent->request($request, $fname);
 +          if (exists $options{'pasv'}) {
 +              if (defined $passive) {
 +                  $ENV{'FTP_PASSIVE'}=$passive;
 +              } else {
 +                  delete $ENV{'FTP_PASSIVE'};
 +              }
 +          }
 +          if (! $response->is_success) {
 +              if (defined $pkg_dir) {
 +                  uscan_warn "In directory $pkg_dir, downloading\n  $url 
failed: " . $response->status_line . "\n";
 +              } else {
 +                  uscan_warn "Downloading\n $url failed:\n" . 
$response->status_line . "\n";
 +              }
 +              return 0;
 +          }
        }
 -      if (-f "$destdir/$newfile_base") {
 -          print " => $newfile_base already in package directory\n"
 -              if $verbose or ($download == 0 and ! $dehs);
 -          return 0;
 +      return 1;
 +    };
 +    ############################# END SUB DOWNLOAD 
##################################
 +
 +    # Download tarball
 +    my $download_available;
 +    my $sigfile_base = $newfile_base;
 +    if ($options{'pgpmode'} ne 'previous') {
 +      # try download package
 +      if ( $download == 3 and -e "$destdir/$newfile_base") {
 +          uscan_msg "Download and overwrite the existing file: 
$newfile_base\n";
 +      } elsif ( -e "$destdir/$newfile_base") {
 +          uscan_msg "Don\'t download and use the existing file: 
$newfile_base\n";
 +          $download_available = 1;
 +      } elsif ($download >0) {
 +          uscan_msg "Downloading upstream package: $newfile_base\n";
 +          $download_available = $downloader->($upstream_url, 
"$destdir/$newfile_base");
 +      } else { # $download = 0, 
 +          uscan_msg "Don\'t downloading upstream package: $newfile_base\n";
 +          $download_available = 0;    
        }
 -      foreach my $suffix (qw(gz bz2 lzma xz)) {
 -          if (-f "$destdir/${pkg}_${newversion}.orig.tar.$suffix") {
 -              print " => ${pkg}_${newversion}.orig.tar.$suffix already in 
package directory '$destdir'\n"
 -                  if $verbose or ($download == 0 and ! $dehs);
 -              return 0;
 +
 +      # Decompress archive if requested and applicable
 +      if ($download_available and $options{'decompress'}) {
 +          my $suffix = $sigfile_base;
 +          $suffix =~ s/.*?(\.gz|\.xz|\.bz2|\.lzma)?$/$1/;
 +          if ($suffix eq '.gz') {
 +              if ( -x '/bin/gunzip') {
 +                  system('/bin/gunzip', "$destdir/$sigfile_base");
 +                  $sigfile_base =~ s/(.*?)\.gz/$1/;
 +              } else {
 +                  uscan_warn("Please install gzip.\n");
 +                  return 1;
 +              }
 +          } elsif ($suffix eq '.xz') {
 +              if ( -x '/usr/bin/unxz') {
 +                  system('/usr/bin/unxz', "$destdir/$sigfile_base");
 +                  $sigfile_base =~ s/(.*?)\.xz/$1/;
 +              } else {
 +                  uscan_warn("Please install xz-utils.\n");
 +                  return 1;
 +              }
 +          } elsif ($suffix eq '.bz2') {
 +              if ( -x '/bin/bunzip2') {
 +                  system('/bin/bunzip2', "$destdir/$sigfile_base");
 +                  $sigfile_base =~ s/(.*?)\.bz2/$1/;
 +              } else {
 +                  uscan_warn("Please install bzip2.\n");
 +                  return 1;
 +              }
 +          } elsif ($suffix eq '.lzma') {
 +              if ( -x '/usr/bin/unlzma') {
 +                  system('/usr/bin/unlzma', "$destdir/$sigfile_base");
 +                  $sigfile_base =~ s/(.*?)\.lzma/$1/;
 +              } else {
 +                  uscan_warn "Please install xz-utils or lzma.\n";
 +                  return 1;
 +              }
            }
        }
      }

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