X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=Debian%2FDgit.pm;h=2555812c46abcdd1c617e718b0cb1c5643e8e0ba;hb=b294deda313d2cbf29e2401aac585736cb2582f3;hp=ac44b9ab4c529f712a0c9322d2c1e2b146702250;hpb=0711cc9a16065c5e69406eb9d182cc686600a366;p=dgit.git diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index ac44b9ab..2555812c 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -8,6 +8,7 @@ use warnings; use POSIX; use IO::Handle; use Config; +use Digest::SHA; BEGIN { use Exporter (); @@ -17,7 +18,9 @@ BEGIN { @ISA = qw(Exporter); @EXPORT = qw(setup_sigwarn debiantag server_branch server_ref - stat_exists fail ensuredir executable_on_path + stat_exists link_ltarget + hashfile + fail ensuredir executable_on_path waitstatusmsg failedcmd cmdoutput cmdoutput_errok git_rev_parse git_get_ref git_for_each_ref @@ -219,6 +222,22 @@ sub cmdoutput { return $d; } +sub link_ltarget ($$) { + my ($old,$new) = @_; + lstat $old or return undef; + if (-l _) { + $old = cmdoutput qw(realpath --), $old; + } + link $old, $new or die "link $old $new: $!"; +} + +sub hashfile ($) { + my ($fn) = @_; + my $h = Digest::SHA->new(256); + $h->addfile($fn); + return $h->hexdigest(); +} + sub git_rev_parse ($) { return cmdoutput qw(git rev-parse), "$_[0]~0"; }