tag 388567 + patch
thanks

Hello,

I have implemented support of the new source formats in
svn-inject/svn-buildpackage.

For svn-inject, I believe it's complete.

For svn-buildpackage it has limitations: multiple source tarballs only
work properly when they are stored in $origDir, you can't download them
since you don't know that they exist and the name that they have.

I haven't touched svn-upgrade, I don't use it.

I would be glad to see a new release with this patch merged so that
less people complain that svn-buildpackage doesn't support the new format
yet. :-)

Cheers,
-- 
Raphaël Hertzog
Index: svn-buildpackage
===================================================================
--- svn-buildpackage    (révision 15176)
+++ svn-buildpackage    (copie de travail)
@@ -387,6 +387,10 @@
         $origfile = long_path($startdir . "/../tarballs/$orig");
     }
 };
+my $origDir = $$c{"origDir"} || "$startdir/../tarballs";
+my %otherOrigFiles = map { /\.orig-([\w-]+)\.tar\.(gz|bz2|lzma)$/ ? ($1 => $_) 
: () } grep {
+    /(?:^|\/)\Q${package}_${upVersion}\E\.orig-[\w-]+\.tar\.(gz|bz2|lzma)$/
+} <$origDir/*>;
 
 if(!defined($origfile)) {
     $$c{"origDir"} = $startdir . "/../tarballs/" if(!defined($$c{"origDir"}));
@@ -492,36 +496,42 @@
    else {
       print (_g("W: %s not found, expect problems...\n"), $abs_origfile) if(! 
-e $abs_origfile);
    }
-   if($origfile && -e $abs_origfile) {
-      if(-e $orig_target) {
-         if(((stat($abs_origfile))[7]) != ((stat($orig_target))[7]))
-         {
-            die sprintf(_g("%s exists but differs from %s!\nAborting, fix this 
manually..."),
-              $orig_target, $abs_origfile);
-         }
+   foreach my $file ($origfile, values %otherOrigFiles) {
+      if (not defined $file) {
+         # no orig at all, try exporting
+        exportToOrigDir;
+        last;
       }
-      else {
-         # orig in tarball-dir but not in build-area
-         if($opt_nolinks) {
-            withechoNoPrompt("cp", long_path($origfile), "$ba/$orig")
-            ||
-            exportToOrigDir;
+      my $absfile=long_path($file);
+      my $fname = basename($file);
+      my $target="$ba/$fname";
+      if (-e $absfile) {
+         if(-e $target) {
+            if(((stat($absfile))[7]) != ((stat($target))[7]))
+            {
+               die sprintf(_g("%s exists but differs from %s!\nAborting, fix 
this manually..."),
+                 $target, $absfile);
+            }
          }
          else {
-            link(long_path($origfile),"$ba/".$orig)
-            ||
-            symlink(long_path($origfile),"$ba/".$orig)
-            ||
-            withechoNoPrompt("cp",long_path($origfile),"$ba/$orig")
-            ||
-            exportToOrigDir;
+            # orig in tarball-dir but not in build-area
+            if($opt_nolinks) {
+               withechoNoPrompt("cp", long_path($file), "$ba/$fname")
+               ||
+               (($file eq $origfile) && exportToOrigDir);
+            }
+            else {
+               link(long_path($file),"$ba/$fname")
+               ||
+               symlink(long_path($file),"$ba/$fname")
+               ||
+               withechoNoPrompt("cp",long_path($file),"$ba/$fname")
+               ||
+               (($file eq $origfile) && exportToOrigDir);
+            }
          }
       }
    }
-   else {
-      # no orig at all, try exporting
-      exportToOrigDir;
-   }
 }
 
 # contents examination for "cp -l" emulation
@@ -575,6 +585,17 @@
          # Otherwise, we put them into a new directory
          withecho "mv", "$ba/tmp-$mod", $bdir;
       }
+      foreach my $component (keys %otherOrigFiles) {
+         withecho "rm", "-rf", "$bdir/$component";
+         withecho "tar", "--no-same-owner", "--no-same-permissions", 
"--extract", "--file", $otherOrigFiles{$component}, "--directory", 
"$ba/tmp-$mod";
+         my @entries = (<$ba/tmp-$mod/*>);
+         if (@entries == 1) {
+            withecho "mv", (<$ba/tmp-$mod/*>), "$bdir/$component";
+            rmdir "$ba/tmp-$mod";
+         } else {
+            withecho "mv", "$ba/tmp-$mod", "$bdir/$component";
+         }
+      }
    }
    if($opt_nolinks || $opt_ignnew) {
       withecho ("svn", "--force", "export", $$c{"trunkDir"},"$bdir");
Index: svn-inject
===================================================================
--- svn-inject  (révision 15176)
+++ svn-inject  (copie de travail)
@@ -138,6 +138,12 @@
    "set-props|setprops"  => \$opt_setprops,
 );
 
+my %supported_formats = (
+    "1.0" => 1,
+    "3.0 (quilt)" => 1,
+    "3.0 (native)" => 1,
+);
+
 #shamelessly copied and slightly modified from svn-bp
 my @CONFARGS;
 for my $file ($ENV{"HOME"}."/.svn-buildpackage.conf") {
@@ -277,11 +283,11 @@
 
 my $package;
 my $debVersion;
-my $dscOrigFilename;
 my $dscDiff;
 my $dscFormat;
+my $dscDebianTar;
+my %dscOtherOrig;
 
-
 sub printImportDetails ()
 {
     return 0 if (!defined $opt_debug);
@@ -303,21 +309,25 @@
    if(/^(\s\w+\s\d+\s+)((.*)_(.*).orig.tar.(gz|bz2))/)
    {
       $dscOrig="$fromDir/$2";
-      $dscOrigFilename=$2;
       $upsVersion=$4;
    }
+   if (/^(\s\w+\s\d+\s+)((.*)_(.*).orig(?:-([\w-]+)).tar.(gz|bz2))/)
+   {
+       $dscOtherOrig{$5}="$fromDir/$2";
+   }
+   $dscDebianTar = "$fromDir/$1" 
if(/^\s\w+\s\d+\s(.+\.debian\.tar\.(gz|bz2))\n/);
    $dscDiff = "$fromDir/$1" if(/^\s\w+\s\d+\s(.+\.diff.(gz|bz2))\n/);
 }
 close($dsc);
 
-die _g("svn-buildpackage doesn't support Debian source package formats other 
than 1.0. Aborting.")
-   unless ($dscFormat == "1.0");
+die sprintf(_g("svn-buildpackage doesn't support Debian source package format 
%s. Aborting."), $dscFormat)
+   unless $supported_formats{$dscFormat};
 
 if($opt_checkout && -d "$basedir/$package") {
    die sprintf(_g("%s/%s already exists, aborting...\n"), $basedir, $package);
 }
 
-$dscDiff=long_path($dscDiff);
+$dscDiff=long_path($dscDiff) if defined $dscDiff;
 
 if($dscOrig) {
    $opt_tardir=long_path($opt_tardir ? $opt_tardir : "$basedir/tarballs");
@@ -333,16 +343,27 @@
 my %ourfiles;
 my $changed_non_debian=0;
 # creating the list of relevant files for mergeWithUpstream mode
-if($opt_onlychanged && $dscDiff) {
-   open(my $dl, (($dscDiff=~/bz2/i)?"bz":"z")."cat $dscDiff|");
-   while(<$dl>) {
-       if(/^\+\+\+\ [^\/]+\/(.+)\n/) {
-           my $file=$1;
-           $ourfiles{$file}=1;
-           $changed_non_debian += ( ! ($file=~/^debian/));
+if($opt_onlychanged) {
+   if ($dscDiff) {
+       open(my $dl, (($dscDiff=~/bz2/i)?"bz":"z")."cat $dscDiff|");
+       while(<$dl>) {
+          if(/^\+\+\+\ [^\/]+\/(.+)\n/) {
+              my $file=$1;
+              $ourfiles{$file}=1;
+              $changed_non_debian += ( ! ($file=~/^debian/));
+          }
        }
+       close($dl);
+   } elsif ($dscDebianTar) {
+       open(my $dl, "tar tf $dscDebianTar|"); # Tar detects compression alone
+       while(<$dl>) {
+          chomp;
+          print "ourfile: $_\n";
+          $ourfiles{$_}=1;
+          $changed_non_debian += ( ! ($_=~/^debian/));
+       }
+       close($dl);
    }
-   close($dl);
 }
 $changed_non_debian = 0 if($opt_nobranches); # ignore their original versions 
in upstream branch
 
@@ -395,6 +416,29 @@
    }
    # also, would be nice with a little error checking to see if everything 
worked.
    withecho("mv",@filesInside, "current");
+  
+   # Extract supplementary tarballs
+   foreach my $component (keys %dscOtherOrig) {
+       withecho("rm", "-rf", "current/$component");
+       mkdir "$component.svn-bp-tmp";
+       chdir "$component.svn-bp-tmp";
+       withecho "tar", $opt_tarquiet, "-x", "-f", $dscOtherOrig{$component};
+       oldSvnDirsCheck ".";
+       @filesInside=(<*>);
+       $folder_needed=0;
+       foreach my $file (@filesInside) {
+           $folder_needed=1 if -f $file
+       }
+       
+       if($folder_needed) {
+          chdir "..";
+          withecho("mv", "$component.svn-bp-tmp", "current/$component");
+       } else {
+          withecho("mv", @filesInside, "../current/$component");
+          chdir "..";
+          rmdir "$component.svn-bp-tmp";
+       }
+   }
    
    if($opt_onlychanged) {
        chdir "current" || die _g("Internal operation error, unable to create 
local import directory\n"); # code 42, stop before unlinking anything
@@ -457,7 +501,11 @@
    }
    mkdir "unpdir";
    chdir "unpdir";
-   withecho "dpkg-source -x $opt_dsc";
+   if ($dscFormat eq "3.0 (quilt)") {
+       withecho "dpkg-source --no-copy --skip-patches -x $opt_dsc";
+   } else {
+       withecho "dpkg-source -x $opt_dsc";
+   }
    system "rm -f *.gz *.bz2";
    # now use svn_load_dirs to upgrade the trunk fork to Debian versions.
    # For mergeWithUpstream mode, drop all unchanged files
Index: debian/changelog
===================================================================
--- debian/changelog    (révision 15176)
+++ debian/changelog    (copie de travail)
@@ -1,3 +1,10 @@
+svn-buildpackage (0.7.1+nmu1) UNRELEASED; urgency=low
+
+  * Non-maintainer upload.
+  * Add support for "3.0 (quilt)" and "3.0 (native)" in svn-inject.
+
+ -- Raphaël Hertzog <hert...@debian.org>  Thu, 14 Jan 2010 15:40:22 +0100
+
 svn-buildpackage (0.7.1) unstable; urgency=low
 
   * Add dependency on liblocale-gettext-perl to support the

Reply via email to