X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=dgit;h=78a0e31dbd44a4efee44fb1661c475f261da256f;hp=93fb6fcd2a47beff177cab661b9a316ef2046958;hb=377e1c315cc73e5364506cf5eb601de130f72c77;hpb=fe01f87bb364084b6fffecfc5287818edc33718d diff --git a/dgit b/dgit index 93fb6fcd..78a0e31d 100755 --- a/dgit +++ b/dgit @@ -28,6 +28,7 @@ use Dpkg::Version; use POSIX; our $isuite = 'unstable'; +our $idistro; our $package; our $sign = 1; @@ -69,7 +70,11 @@ my $lbranch_re = '^refs/heads/'.$branchprefix.'/([^/.]+)$'; sub lref () { return "refs/heads/".lbranch(); } sub lrref () { return "refs/remotes/$remotename/$csuite"; } sub rrref () { return "refs/$branchprefix/$csuite"; } -sub debiantag ($) { return "debian/$_[0]"; } +sub debiantag ($) { + my ($v) = @_; + $v =~ y/~:/_%/; + return "debian/$v"; +} sub dscfn ($) { return "${package}_$_[0].dsc"; } @@ -246,7 +251,7 @@ sub access_distro () { sub access_cfg (@) { my (@keys) = @_; - my $distro = access_distro(); + my $distro = $idistro || access_distro(); my $value = cfg(map { ("dgit-distro.$distro.$_", "dgit.default.$_") } @keys); return $value; @@ -706,7 +711,15 @@ sub pull () { } sub check_not_dirty () { - runcmd @git, qw(diff --quiet HEAD); + my @cmd = (@git, qw(diff --quiet HEAD)); + printcmd(\*DEBUG,"+",@cmd) if $debug>0; + $!=0; $?=0; system @cmd; + return if !$! && !$?; + if (!$! && $?==256) { + fail "working tree is dirty (does not match HEAD)"; + } else { + failedcmd @cmd; + } } sub commit_quilty_patch ($) { @@ -802,6 +815,9 @@ sub dopush () { print "[new .dsc left in $dscfn.tmp]\n"; } if ($sign) { + if (!defined $keyid) { + $keyid = access_cfg('keyid','RETURN-UNDEF'); + } my @tag_cmd = (@git, qw(tag -s -m), "Release $dversion for $csuite [dgit]"); push @tag_cmd, qw(-u),$keyid if defined $keyid; @@ -978,6 +994,8 @@ sub parseopts () { push @$om, $2; } elsif (m/^--existing-package=(.*)/s) { $existing_package = $1; + } elsif (m/^--distro=(.*)/s) { + $idistro = $1; } else { badusage "unknown long option \`$_'"; } @@ -994,6 +1012,8 @@ sub parseopts () { $new_package=1; } elsif (s/^-c(.*=.*)//s) { push @git, '-c', $1; + } elsif (s/^-d(.*)//s) { + $idistro = $1; } elsif (s/^-C(.*)//s) { $changesfile = $1; } elsif (s/^-k(.*)//s) {