X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=dgit;h=d62694a90818c7d461324381f57a3eb4d6b3afc2;hp=d771ce1067d20973b98e31335881ad78d1526707;hb=d4f8df7adccd9ed9a0dd1cd1837ed7782557a828;hpb=1672f625cd5455a458cc21f031634ba88c37f8e2 diff --git a/dgit b/dgit index d771ce10..d62694a9 100755 --- a/dgit +++ b/dgit @@ -48,7 +48,7 @@ our $absurdity = undef; ###substituted### our @rpushprotovsn_support = qw(4 3 2); # 4 is new tag format our $protovsn; -our $isuite = 'unstable'; +our $isuite; our $idistro; our $package; our @ropts; @@ -565,6 +565,8 @@ sub cmd_help () { our $td = $ENV{DGIT_TEST_DUMMY_DIR} || "DGIT_TEST_DUMMY_DIR-unset"; our %defcfg = ('dgit.default.distro' => 'debian', + 'dgit.default.default-suite' => 'unstable', + 'dgit.default.old-dsc-distro' => 'debian', 'dgit-suite.*-security.distro' => 'debian-security', 'dgit.default.username' => '', 'dgit.default.archive-query-default-component' => 'main', @@ -2672,6 +2674,16 @@ END } last; } + + if (defined $csuite) { + printdebug "git_lrfetch_sane: tidying any old suite lrfetchrefs\n"; + git_for_each_ref("refs/dgit-fetch/$csuite", sub { + my ($objid,$objtype,$lrefname,$reftail) = @_; + next if $lrfetchrefs_f{$lrefname}; # $csuite eq $distro ? + runcmd_ordryrun_local @git, qw(update-ref -d), $lrefname; + }); + } + printdebug "git_lrfetch_sane: git fetch --no-insane emulation complete\n", Dumper(\%lrfetchrefs_f); } @@ -2757,12 +2769,13 @@ sub parse_dsc_field ($$) { if (!defined $f) { progress "$what: NO git hash"; } elsif (($dsc_hash, $dsc_distro, $dsc_hint_tag, $dsc_hint_url) - = $f =~ m/^(\w+) ($distro_re) ($versiontag_re) (\S+)(?:\s|$)/) { + = $f =~ m/^(\w+)\s+($distro_re)\s+($versiontag_re)\s+(\S+)(?:\s|$)/) { progress "$what: specified git info ($dsc_distro)"; $dsc_hint_tag = [ $dsc_hint_tag ]; } elsif ($f =~ m/^\w+\s*$/) { $dsc_hash = $&; - $dsc_distro //= 'debian'; + $dsc_distro //= cfg qw(dgit.default.old-dsc-distro + dgit.default.distro); $dsc_hint_tag = [ debiantags +(getfield $dsc, 'Version'), $dsc_distro ]; progress "$what: specified git hash"; @@ -2823,8 +2836,12 @@ END return $lrf; }; - if (parse_cfg_bool 'rewrite-map-enable', 'true', - access_cfg('rewrite-map-enable', 'RETURN-UNDEF')) { + my $rewrite_enable = do { + local $idistro = $dsc_distro; + access_cfg('rewrite-map-enable', 'RETURN-UNDEF'); + }; + + if (parse_cfg_bool 'rewrite-map-enable', 'true', $rewrite_enable) { my $lrf = $do_fetch->("rewrite map", $rewritemap) or return; $mapref = $lrf.'/'.$rewritemap; my $rewritemapdata = git_cat_file $mapref.':map'; @@ -4282,7 +4299,8 @@ sub fetchpullargs () { $isuite = branchsuite(); if (!$isuite) { my $clogp = parsechangelog(); - $isuite = getfield $clogp, 'Distribution'; + my $clogsuite = getfield $clogp, 'Distribution'; + $isuite= $clogsuite if $clogsuite ne 'UNRELEASED'; } } elsif (@ARGV==1) { ($isuite) = @ARGV; @@ -5398,6 +5416,7 @@ sub quilt_fixup_multipatch ($$$) { rmtree '.pc'; + runcmd @git, qw(checkout -f), $headref, qw(-- debian); my $unapplied=git_add_write_tree(); printdebug "fake orig tree object $unapplied\n"; @@ -6140,18 +6159,28 @@ sub cmd_clone_dgit_repos_server { badusage "need destination argument" unless @ARGV==1; my ($destdir) = @ARGV; $package = '_dgit-repos-server'; + local $access_forpush = 0; my @cmd = (@git, qw(clone), access_giturl(), $destdir); debugcmd ">",@cmd; exec @cmd or fail "exec git clone: $!\n"; } +sub cmd_print_dgit_repos_server_source_url { + badusage "no arguments allowed to dgit print-dgit-repos-server-source-url" + if @ARGV; + $package = '_dgit-repos-server'; + local $access_forpush = 0; + my $url = access_giturl(); + print $url, "\n" or die $!; +} + sub cmd_setup_mergechangelogs { badusage "no arguments allowed to dgit setup-mergechangelogs" if @ARGV; setup_mergechangelogs(1); } sub cmd_setup_useremail { - badusage "no arguments allowed to dgit setup-mergechangelogs" if @ARGV; + badusage "no arguments allowed to dgit setup-useremail" if @ARGV; setup_useremail(1); } @@ -6419,6 +6448,10 @@ END sub parseopts_late_defaults () { + $isuite //= cfg("dgit-distro.$idistro.default-suite", 'RETURN-UNDEF') + if defined $idistro; + $isuite //= cfg('dgit.default.default-suite'); + foreach my $k (keys %opts_opt_map) { my $om = $opts_opt_map{$k};