[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