our $dryrun = 0;
our $changesfile;
our $new_package = 0;
+our $ignoredirty = 0;
+our $noquilt = 0;
our $existing_package = 'dpkg';
our $cleanmode = 'dpkg-source';
return ($tree,$dir);
}
-sub dsc_files () {
- my $field = $dsc->{'Checksums-Sha256'} || $dsc->{Files};
- defined $field or
- fail "missing both Checksums-Sha256 and Files in ".
+sub dsc_files_info () {
+ foreach my $csum (qw(Sha256 Sha1 MD5)) {
+ my $fname = $csum eq 'MD5' ? 'Files' : "Checksums-$csum";
+ 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;
+ }
+ 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 $@;
+ push @out, {
+ Hash => $1,
+ Bytes => $2,
+ Filename => $3,
+ Digester => $digester,
+ };
+ }
+ return @out;
+ }
+ fail "missing any supported Checksums-* or Files field in ".
$dsc->get_option('name');
- map {
- m/^\w+ \d+ (\S+)$/ or
- fail "could not parse .dsc Files/Checksums line \`$_'";
- $1;
- } grep m/\S/, split /\n/, $field;
+}
+
+sub dsc_files () {
+ map { $_->{Filename} } dsc_files_info();
}
sub is_orig_file ($) {
}
sub check_not_dirty () {
+ return if $ignoredirty;
my @cmd = (@git, qw(diff --quiet HEAD));
printcmd(\*DEBUG,"+",@cmd) if $debug>0;
$!=0; $?=0; system @cmd;
my ($format) = @_;
return 0 unless $format eq '3.0 (quilt)';
print "Format \`$format', urgh\n";
+ if ($noquilt) {
+ print "Not doing any fixup of \`$format' due to --no-quilt-fixup";
+ return 0;
+ }
return 1;
}
git_fetch_us();
}
if (fetch_from_archive()) {
- is_fast_fwd(lrref(), 'HEAD') or die;
+ is_fast_fwd(lrref(), 'HEAD') or
+ fail "dgit push: HEAD is not a descendant".
+ " of the archive's version.\n".
+ "$us: To overwrite it, use git-merge -s ours ".lrref().".";
} else {
$new_package or
fail "package appears to be new in this suite;".
$cleanmode = $1;
} elsif (m/^--clean=(.*)$/s) {
badusage "unknown cleaning mode \`$1'";
+ } elsif (m/^--ignore-dirty$/s) {
+ $ignoredirty = 1;
+ } elsif (m/^--no-quilt-fixup$/s) {
+ $noquilt = 1;
} else {
badusage "unknown long option \`$_'";
}
quilt_fixup_editor();
}
+delete $ENV{'DGET_UNPACK'};
+
parseopts();
print STDERR "DRY RUN ONLY\n" if $dryrun;
if (!@ARGV) {