chiark / gitweb /
Split brain: Include debian/tests/control in fake dsc
[dgit.git] / Debian / Dgit.pm
index fce2ceb68ed7ef2eefdec0dec170a53c22632f99..2555812c46abcdd1c617e718b0cb1c5643e8e0ba 100644 (file)
@@ -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
@@ -196,7 +199,7 @@ sub failedcmd {
 sub cmdoutput_errok {
     die Dumper(\@_)." ?" if grep { !defined } @_;
     debugcmd "|",@_;
-    open P, "-|", @_ or die $!;
+    open P, "-|", @_ or die "$_[0] $!";
     my $d;
     $!=0; $?=0;
     { local $/ = undef; $d = <P>; }
@@ -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";
 }