use Dpkg::Version;
use POSIX;
+our $dgit_version = 'UNRELEASED'; ###substituted###
+
our $isuite = 'unstable';
our $idistro;
our $package;
exit 8;
}
-sub helponly () {
+sub cmd_help () {
print $helpmsg or die $!;
exit 0;
}
'dgit-distro.debian.sshdakls-host' => 'coccia.debian.org',
'dgit-distro.debian.sshdakls-dir' =>
'/srv/ftp-master.debian.org/ftp/dists',
+ 'dgit-distro.debian.upload-host' => 'ftp-master', # for dput
'dgit-distro.debian.mirror' => 'http://ftp.debian.org/debian/');
sub cfg {
$dscurl = access_cfg('mirror').$subpath;
$dscdata = url_get($dscurl);
next unless defined $dscdata;
- $dscurl = access_cfg('mirror').$subpath;
- $dscdata = url_get($dscurl);
my $dscfh = new IO::File \$dscdata, '<' or die $!;
print DEBUG Dumper($dscdata) if $debug>1;
$dsc = parsecontrolfh($dscfh,$dscurl, allow_pgp=>1);
}
sub dsc_files_info () {
- foreach my $csum (qw(Sha256 Sha1 MD5)) {
- my $fname = $csum eq 'MD5' ? 'Files' : "Checksums-$csum";
+ foreach my $csumi (['Checksums-Sha256','Digest::SHA', 'new(256)'],
+ ['Checksums-Sha1', 'Digest::SHA', 'new(1)'],
+ ['Files', 'Digest::MD5', 'new()']) {
+ my ($fname, $module, $method) = @$csumi;
my $field = $dsc->{$fname};
next unless defined $field;
- my $digest = uc $csum;
- if (!eval "use Digest::$digest; 1;") {
- print DEBUG "ignoring $fname because $@\n";
- next;
- }
+ eval "use $module; 1;" or die $@;
my @out;
foreach (split /\n/, $field) {
next unless m/\S/;
m/^(\w+) (\d+) (\S+)$/ or
fail "could not parse .dsc $fname line \`$_'";
- my $digester = eval "Digest::$digest->new;" or die $@;
+ my $digester = eval "$module"."->$method;" or die $@;
push @out, {
Hash => $1,
Bytes => $2,
}
sub ensure_we_have_orig () {
- foreach my $f (dsc_files()) {
+ foreach my $fi (dsc_files_info()) {
+ my $f = $fi->{Filename};
next unless is_orig_file($f);
- if (stat "../$f") {
- die "$f ?" unless -f _;
+ if (open F, "<", "../$f") {
+ $fi->{Digester}->reset();
+ $fi->{Digester}->addfile(*F);
+ F->error and die $!;
+ my $got = $fi->{Digester}->hexdigest();
+ $got eq $fi->{Hash} or
+ fail "existing file $f has hash $got but .dsc".
+ " demands hash $fi->{Hash}".
+ " (perhaps you should delete this file?)";
+ print "using existing $f\n";
+ next;
} else {
die "$f $!" unless $!==&ENOENT;
}
}
sub git_fetch_us () {
- badusage "cannot dry run with fetch" if $dryrun;
- runcmd @git, qw(fetch),access_giturl(),fetchspec();
+ runcmd_ordryrun @git, qw(fetch),access_giturl(),fetchspec();
}
sub fetch_from_archive () {
if (check_for_git()) {
print "fetching existing git history\n";
git_fetch_us();
- runcmd @git, qw(fetch origin);
+ runcmd_ordryrun @git, qw(fetch origin);
} else {
print "starting new git history\n";
}
create_remote_git_repo();
}
runcmd_ordryrun @git, qw(push),access_giturl(),"HEAD:".rrref();
+ runcmd_ordryrun @git, qw(update-ref -m), 'dgit push', lrref(), 'HEAD';
if (!$dryrun) {
rename "../$dscfn.tmp","../$dscfn" or die "$dscfn $!";
} else {
$keyid = access_cfg('keyid','RETURN-UNDEF');
}
my @tag_cmd = (@git, qw(tag -s -m),
- "Release $dversion for $csuite [dgit]");
+ "$package release $dversion for $csuite [dgit]");
push @tag_cmd, qw(-u),$keyid if defined $keyid;
push @tag_cmd, $tag;
runcmd_ordryrun @tag_cmd;
my $ncommits = 3;
my $patchname = "auto-$version-$headref-$time";
my $msg = cmdoutput @git, qw(log), "-n$ncommits";
+ mkpath '.git/dgit';
my $descfn = ".git/dgit/quilt-description.tmp";
open O, '>', $descfn or die "$descfn: $!";
$msg =~ s/\n/\n /g;
build_maybe_quilt_fixup();
}
+sub cmd_version {
+ print "dgit version $dgit_version\n";
+}
+
sub parseopts () {
my $om;
while (@ARGV) {
} elsif (m/^--no-sign$/) {
$sign=0;
} elsif (m/^--help$/) {
- helponly();
+ cmd_help();
} elsif (m/^--new$/) {
$new_package=1;
} elsif (m/^--(\w+)=(.*)/s &&
if (s/^-n/-/) {
$dryrun=1;
} elsif (s/^-h/-/) {
- helponly();
+ cmd_help();
} elsif (s/^-D/-/) {
open DEBUG, ">&STDERR" or die $!;
$debug++;