[SCM] UNNAMED PROJECT branch, policy-dc10, updated. 0.31-43-g0a9840f

Niels Thykier nthykier-guest at alioth.debian.org
Thu Sep 30 22:13:00 UTC 2010


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "UNNAMED PROJECT".

The branch, policy-dc10 has been updated
       via  0a9840f21ac57359f3ab672e79b3fa547fa43305 (commit)
      from  116c34b6130fdc5f42bd3ac8ede1ce043cde0076 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 0a9840f21ac57359f3ab672e79b3fa547fa43305
Author: Niels Thykier <niels at thykier.net>
Date:   Fri Oct 1 00:11:39 2010 +0200

    Relativise Class-Path entries after the same rules as symlinks.

-----------------------------------------------------------------------

Summary of changes:
 jh_manifest |   81 ++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 53 insertions(+), 28 deletions(-)

diff --git a/jh_manifest b/jh_manifest
index 92dee0c..0c7d8c5 100755
--- a/jh_manifest
+++ b/jh_manifest
@@ -256,46 +256,68 @@ sub parse_package_file{
     return $manifests;
 }
 
+
+sub relativise_link{
+    # link and target must be absolute paths.
+    my $link = shift;
+    my $target = shift;
+    my $reg = qr@/++ at o;
+    my @ldirs = split($reg, substr($link, 1));
+    my @tdirs = split($reg, substr($target, 1));
+    my $lfile;
+    my $tfile;
+    my $e = 0;
+    my $rt;
+    # Not the same root folder -> must be absolute.
+    return $target if($ldirs[0] ne $tdirs[0]);
+    # Remove the file element
+    pop(@ldirs);
+    $tfile = pop(@tdirs);
+    # Find the part of the paths that are shared (based on code from dh_link)
+    for( ; $e < scalar(@ldirs) && $e < scalar(@tdirs) && $ldirs[$e] eq $tdirs[$e] ; $e++ ){}
+    $rt = '../' x ($#tdirs - $e);
+    $rt .= join('/', @ldirs[$e..$#ldirs]);
+
+    return "$rt/$tfile" if($rt);
+    return $tfile;
+}
+
 sub resolve_link{
     my $jar = shift;
+    my $relfrom = shift;
     my $link = shift;
     my $reldir = shift//'';
     my $tmp = shift//'';
     my $target;
-    my $path;
     my $patht;
+    my $flink;
     $tmp .= "/" if($tmp);
     if($reldir){
-        return $link if( -e "$tmp$reldir/$link" && ! -l "$tmp$reldir/$link");
-        $target = readlink("$tmp$reldir/$link");
-        if($target = m@/@o){
-            $reldir =~ s@/$@@og;
-            $path = "$reldir/$link";
-            $patht = "$reldir/$target";
-        } else {
-            # FIXME: Handle fishy links more gracefully (e.g. like normal relative symlinks).
-            # "Fishy" link (a.jar -> ../$something/a-1.jar)
-            # Resolve as absolute link
-            $link = "$reldir/$link";
-            $reldir = '';
-        }
+        $flink = "$tmp$reldir$link";
+    } else {
+        $flink = "$tmp$link";
     }
-    if(!$reldir){
-        return $link if( -e "$tmp$link" && ! -l "$tmp$link");
-        $target = Cwd::abs_path("$tmp$link");
-        $path = $link;
+    # Is it really a link?
+    return $link if( -e $flink && ! -l $flink);
+
+    $target = Cwd::abs_path($flink);
+    $target = substr($target, length($tmp) - 1) if(defined($target) && $tmp);
+
+    if($reldir){
+        $patht = "$reldir/$target";
+    } else {
         $patht = $target;
     }
-    error("$tmp$path is a broken symlink or not possible to resolve, $!")
-        unless(defined($target) && (-e "$tmp$patht" || -e $patht));
+    error("$flink is a broken symlink or not possible to resolve, $!")
+        unless(defined($target) && ( -e "$tmp$patht" || -e $patht));
+    $target = relativise_link($flink, $target);
     verbose_print("Rewriting $link to $target (in $jar)");
     return $target;
 }
 
 sub find_inc{
     my $jar = shift;
-    my $path = $jar;
-    $path =~ s@/[^/]+$@@og;
+    my $path = dirname($jar);
     foreach my $inc (@incdir){
         if($path =~ m/$inc$/){
             return $inc;
@@ -306,16 +328,17 @@ sub find_inc{
 
 sub rewrite_classpath{
     my $jar = shift;
+    my $relfrom = shift;
     my $cp = shift;
     if( -e $cp ){
         #  Only rewrite if it is a public library.
         return $cp unless(find_inc($cp));
         # Absolute system installed library
-        return resolve_link($jar, $cp);
+        return resolve_link($jar, $relfrom, $cp);
     } else {
-        my $reldir = find_inc($jar);
+        my $reldir = $relfrom if(defined(find_inc($jar)));
         if( $reldir && -e "$reldir/$cp" ){
-            return resolve_link($jar, $cp, $reldir);
+            return resolve_link($jar, $relfrom, $cp, $reldir);
         } else {
             # $cp definitely do not point to a system installed library
             # but it could point to a library in a package we are currently working with.
@@ -326,10 +349,10 @@ sub rewrite_classpath{
                 $ptmpdir = Cwd::abs_path($ptmpdir) or error("Cannot resolve the path to the tempdir of $pkg,");
                 if( -e "$ptmpdir/$cp"){
                     return $cp unless(find_inc("$ptmpdir/$cp"));
-                    return resolve_link($jar, $cp, '', $ptmpdir);
+                    return resolve_link($jar, $relfrom, $cp, '', $ptmpdir);
                 }
                 if( $reldir && -e "$ptmpdir/$reldir/$cp" ){
-                    return resolve_link($jar, $cp, $reldir, $ptmpdir);
+                    return resolve_link($jar, $relfrom, $cp, $reldir, $ptmpdir);
                 }
             }
         }
@@ -340,12 +363,14 @@ sub rewrite_classpath{
 sub update_jar_classpath{
     my $jar = shift;
     my $main = shift;
+    my $relfrom = dirname($jar);
     my $cp = $main->get_value('Class-Path')//'';
     my @cpl;
     my @ncp;
     return 0 unless($cp);
+    $relfrom =~ s@[^/]++$@@o;
     @cpl = split(/\s++/o, $cp);
-    @ncp = map {$_ = rewrite_classpath($jar, $_) } @cpl;
+    @ncp = map {$_ = rewrite_classpath($jar, $relfrom, $_) } @cpl;
     $main->set_value('Class-Path', join(' ', @ncp));
     return 1;
 }


hooks/post-receive
-- 
UNNAMED PROJECT



More information about the pkg-java-commits mailing list