our $git_authline_re = '^([^<>]+) \<(\S+)\> (\d+ [-+]\d+)$';
our $splitbraincache = 'dgit-intern/quilt-cache';
+our $rewritemap = 'dgit-rewrite/map';
our (@git) = qw(git);
our (@dget) = qw(dget);
\&debiantag_new, \&debiantag_maintview)
: debiantags('*',access_nomdistro));
push @specs, server_branch($csuite);
+ push @specs, $rewritemap;
push @specs, qw(heads/*) if deliberately_not_fast_forward;
# This is rather miserable:
progress "no version available from the archive";
}
+ my $rewritemapdata = git_cat_file lrfetchrefs."/".$rewritemap.':map';
+ if (defined $rewritemapdata
+ && $rewritemapdata =~ m/^$dsc_hash(?:[ \t](\w+))/m) {
+ progress "server's git history rewrite map contains a relevant entry!";
+ $dsc_hash = $1;
+ if (defined $dsc_hash) {
+ progress "using rewritten git hash in place of .dsc value";
+ } else {
+ progress "server data says .dsc hash is to be disregarded";
+ }
+ }
+
# If the archive's .dsc has a Dgit field, there are three
# relevant git commitids we need to choose between and/or merge
# together:
sub cmd_quilt_fixup {
badusage "incorrect arguments to dgit quilt-fixup" if @ARGV;
- my $clogp = parsechangelog();
- $version = getfield $clogp, 'Version';
- $package = getfield $clogp, 'Source';
- check_not_dirty();
+ build_prep_early();
clean_tree();
build_maybe_quilt_fixup();
}
parse_dscdata();
my $dgit_commit = $dsc->{$ourdscfield[0]};
- if (defined $dgit_commit &&
- !forceing [qw(import-dsc-with-dgit-field)]) {
+ if (defined $dgit_commit
+ && !forceing [qw(import-dsc-with-dgit-field)]) {
$dgit_commit =~ m/\w+/ or fail "invalid hash in .dsc";
+ $dgit_commit = $&;
progress "dgit: import-dsc of .dsc with Dgit field, using git hash";
my @cmd = (qw(sh -ec),
"echo $dgit_commit | git cat-file --batch-check");