chiark
/
gitweb
/
~ianmdlvl
/
dgit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
If we cannot hardlink origs into our extraction area, use symlinks instead.
[dgit.git]
/
Debian
/
Dgit.pm
diff --git
a/Debian/Dgit.pm
b/Debian/Dgit.pm
index 6854a7cffd74dff3ae7a7d236d41cb5c42fc4088..50e3b860a71ae409c6d803b1cd36788f7617e61a 100644
(file)
--- a/
Debian/Dgit.pm
+++ b/
Debian/Dgit.pm
@@
-36,12
+36,14
@@
BEGIN {
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = qw(setup_sigwarn
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = qw(setup_sigwarn
+ dep14_version_mangle
debiantags debiantag_old debiantag_new
server_branch server_ref
stat_exists link_ltarget
hashfile
fail ensuredir executable_on_path
debiantags debiantag_old debiantag_new
server_branch server_ref
stat_exists link_ltarget
hashfile
fail ensuredir executable_on_path
- waitstatusmsg failedcmd_report_cmd failedcmd
+ waitstatusmsg failedcmd_waitstatus
+ failedcmd_report_cmd failedcmd
cmdoutput cmdoutput_errok
git_rev_parse git_get_ref git_for_each_ref
git_for_each_tag_referring is_fast_fwd
cmdoutput cmdoutput_errok
git_rev_parse git_get_ref git_for_each_ref
git_for_each_tag_referring is_fast_fwd
@@
-143,16
+145,22
@@
sub debugcmd {
printcmd(\*DEBUG,$debugprefix.$extraprefix,@_) if $debuglevel>0;
}
printcmd(\*DEBUG,$debugprefix.$extraprefix,@_) if $debuglevel>0;
}
+sub dep14_version_mangle ($) {
+ my ($v) = @_;
+ # DEP-14 patch proposed 2016-11-09 "Version Mangling"
+ $v =~ y/~:/_%/;
+ $v =~ s/\.(?=\.|$|lock$)/.#/g;
+ return $v;
+}
+
sub debiantag_old ($$) {
my ($v,$distro) = @_;
sub debiantag_old ($$) {
my ($v,$distro) = @_;
- $v =~ y/~:/_%/;
- return "$distro/$v";
+ return "$distro/". dep14_version_mangle $v;
}
sub debiantag_new ($$) {
my ($v,$distro) = @_;
}
sub debiantag_new ($$) {
my ($v,$distro) = @_;
- $v =~ y/~:/_%/;
- return "archive/$distro/$v";
+ return "archive/$distro/".dep14_version_mangle $v;
}
sub debiantags ($$) {
}
sub debiantags ($$) {
@@
-223,6
+231,16
@@
sub failedcmd_report_cmd {
{ local ($!); printcmd \*STDERR, _us().": $intro:", @_ or die $!; };
}
{ local ($!); printcmd \*STDERR, _us().": $intro:", @_ or die $!; };
}
+sub failedcmd_waitstatus {
+ if ($? < 0) {
+ return "failed to fork/exec: $!";
+ } elsif ($?) {
+ return "subprocess ".waitstatusmsg();
+ } else {
+ return "subprocess produced invalid output";
+ }
+}
+
sub failedcmd {
# Expects $!,$? as set by close - see below.
# To use with system(), set $?=-1 first.
sub failedcmd {
# Expects $!,$? as set by close - see below.
# To use with system(), set $?=-1 first.
@@
-236,13
+254,7
@@
sub failedcmd {
# program failed trashed $? >0 system
# syscall failure $! >0 unchanged system
failedcmd_report_cmd undef, @_;
# program failed trashed $? >0 system
# syscall failure $! >0 unchanged system
failedcmd_report_cmd undef, @_;
- if ($? < 0) {
- fail "failed to fork/exec: $!";
- } elsif ($?) {
- fail "subprocess ".waitstatusmsg();
- } else {
- fail "subprocess produced invalid output";
- }
+ fail failedcmd_waitstatus();
}
sub cmdoutput_errok {
}
sub cmdoutput_errok {
@@
-277,7
+289,9
@@
sub link_ltarget ($$) {
if (-l _) {
$old = cmdoutput qw(realpath --), $old;
}
if (-l _) {
$old = cmdoutput qw(realpath --), $old;
}
- link $old, $new or die "link $old $new: $!";
+ my $r = link $old, $new;
+ $r = symlink $old, $new if !$r && $!==EXDEV;
+ $r or die "(sym)link $old $new: $!";
}
sub hashfile ($) {
}
sub hashfile ($) {