[SCM] UNNAMED PROJECT branch, policy-dc10, updated. 0.31-41-gfcfda69

Niels Thykier nthykier-guest at alioth.debian.org
Thu Sep 30 14:35:37 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  fcfda69b7e116b0575cb7644da072be9ca8748b0 (commit)
      from  a0a89afdee5c5050b56bab7266d90f4b99e61c78 (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 fcfda69b7e116b0575cb7644da072be9ca8748b0
Author: Niels Thykier <niels at thykier.net>
Date:   Thu Sep 30 16:34:20 2010 +0200

    Make jh_manifest rewrite Class-Path if it points to a symlink.

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

Summary of changes:
 jh_manifest |   99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 99 insertions(+), 0 deletions(-)

diff --git a/jh_manifest b/jh_manifest
index ce40882..cd003c1 100755
--- a/jh_manifest
+++ b/jh_manifest
@@ -84,6 +84,15 @@ Sets the Debian-Java-Home attribute to I</path/to/java/home> in all
 processed jars. This attribute is used by jarwrapper to determine
 which JVM to use.
 
+=item B<--classpath-rewrite>, B<--no-classpath-rewrite>
+
+Whether jh_manifest should rewrite the values of Class-Path to include
+"SONAME". By default it will do this (after applying any changes to
+Class-Path).
+
+That is myjar.jar will be rewritten to (e.g.) myjar-X.jar if this is
+enabled and myjar.jar is a symlink to myjar-X.jar.
+
 =back
 
 =cut
@@ -93,6 +102,9 @@ my $mcl = '';
 my $jvm = '';
 my $jopt = '';
 my $envcp = 0;
+my $cprw = 1;
+my @packages;
+my @incdir = ('/usr/share/java');
 
 init(options => {
     # -o clashes debhelper's "only scripts"
@@ -101,6 +113,7 @@ init(options => {
     "main|m=s" => \$mcl,
     "classpath|c=s" => \$cp,
     "version|V" => sub { print STDERR "Version has been removed - please stop using it\n"; exit(0) },
+    "classpath-rewrite!" => \$cprw,
      });
 
 if(!$cp && ($ENV{'CLASSPATH'}//'') ne ''){
@@ -109,6 +122,8 @@ if(!$cp && ($ENV{'CLASSPATH'}//'') ne ''){
     $envcp = 1;
 }
 
+ at packages = getpackages('both');
+
 if(@ARGV){
     foreach my $jar (@ARGV){
         update_jar($jar, undef);
@@ -241,6 +256,87 @@ sub parse_package_file{
     return $manifests;
 }
 
+sub resolve_link{
+    my $jar = shift;
+    my $link = shift;
+    my $reldir = shift//'';
+    my $tmp = shift//'';
+    my $target;
+    my $path;
+    my $patht;
+    $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 = '';
+        }
+    }
+    if(!$reldir){
+        return $link if( -e "$tmp$link" && ! -l "$tmp$link");
+        $target = Cwd::abs_path("$tmp$link");
+        $path = $link;
+        $patht = $target;
+    }
+    error("$tmp$path is a broken symlink or not possible to resolve, $!")
+        unless(defined($target) && (-e "$tmp$patht" || -e $patht));
+    verbose_print("Rewriting $link to $target (in $jar)");
+    return $target;
+}
+
+sub rewrite_classpath{
+    my $jar = shift;
+    my $cp = shift;
+    my $target;
+    my $rel = 0;
+    if( -e $cp ){
+        return resolve_link($jar, $cp);
+    }
+    foreach my $inc (@incdir){
+        if( -e "$inc/$cp" ){
+            return resolve_link($jar, $cp, $inc);
+        }
+    }
+    # $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.    if( -e $cp || -e "/usr/share/java/$cp" ){
+    foreach my $pkg (@packages){
+        my $ptmpdir = tmpdir($pkg);
+        # Skip if it does not exists
+        next unless( -d $ptmpdir );
+        $ptmpdir = Cwd::abs_path($ptmpdir) or error("Cannot resolve the path to the tempdir of $pkg,");
+        if( -e "$ptmpdir/$cp"){
+            return resolve_link($jar, $cp, '', $ptmpdir);
+        }
+        foreach my $inc (@incdir){
+            if( -e "$ptmpdir/$inc/$cp" ){
+                return resolve_link($jar, $cp, $inc, $ptmpdir);
+            }
+        }
+    }
+    error("Cannot find a jar matching $cp for $jar");
+}
+
+sub update_jar_classpath{
+    my $jar = shift;
+    my $main = shift;
+    my $cp = $main->get_value('Class-Path')//'';
+    my @cpl;
+    my @ncp;
+    return 0 unless($cp);
+    @cpl = split(/\s++/o, $cp);
+    @ncp = map {$_ = rewrite_classpath($jar, $_) } @cpl;
+    $main->set_value('Class-Path', join(' ', @ncp));
+    return 1;
+}
+
 sub update_jar{
     my $jar = shift;
     my $merge = shift;
@@ -286,6 +382,9 @@ sub update_jar{
         $main->set_value('Debian-Java-Parameters', $jopt);
         $dirty = 1;
     }
+    if($cprw){
+        $dirty = update_jar_classpath($jar, $main);
+    }
     if($dirty){
         my $var;
         my $mem;


hooks/post-receive
-- 
UNNAMED PROJECT



More information about the pkg-java-commits mailing list