chiark
/
gitweb
/
~ianmdlvl
/
dgit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
changelog: start 4.2
[dgit.git]
/
dgit
diff --git
a/dgit
b/dgit
index 733e6ea1c8a02ed9b45e3db505040cbd80cc4868..248a7cbfff5f8a0726f3b8ca08f1c242389867ac 100755
(executable)
--- a/
dgit
+++ b/
dgit
@@
-100,6
+100,8
@@
our $git_authline_re = '^([^<>]+) \<(\S+)\> (\d+ [-+]\d+)$';
our $splitbraincache = 'dgit-intern/quilt-cache';
our $rewritemap = 'dgit-rewrite/map';
our $splitbraincache = 'dgit-intern/quilt-cache';
our $rewritemap = 'dgit-rewrite/map';
+our @dpkg_source_ignores = qw(-i(?:^|/)\.git(?:/|$) -I.git);
+
our (@git) = qw(git);
our (@dget) = qw(dget);
our (@curl) = (qw(curl --proto-redir), '-all,http,https', qw(-L));
our (@git) = qw(git);
our (@dget) = qw(dget);
our (@curl) = (qw(curl --proto-redir), '-all,http,https', qw(-L));
@@
-111,8
+113,8
@@
our (@ssh) = 'ssh';
our (@dgit) = qw(dgit);
our (@aptget) = qw(apt-get);
our (@aptcache) = qw(apt-cache);
our (@dgit) = qw(dgit);
our (@aptget) = qw(apt-get);
our (@aptcache) = qw(apt-cache);
-our (@dpkgbuildpackage) =
qw(dpkg-buildpackage -i\.git/ -I.git
);
-our (@dpkgsource) =
qw(dpkg-source -i\.git/ -I.git
);
+our (@dpkgbuildpackage) =
(qw(dpkg-buildpackage), @dpkg_source_ignores
);
+our (@dpkgsource) =
(qw(dpkg-source), @dpkg_source_ignores
);
our (@dpkggenchanges) = qw(dpkg-genchanges);
our (@mergechanges) = qw(mergechanges -f);
our (@gbp_build) = ('');
our (@dpkggenchanges) = qw(dpkg-genchanges);
our (@mergechanges) = qw(mergechanges -f);
our (@gbp_build) = ('');
@@
-277,6
+279,10
@@
sub gbp_pq {
return opts_opt_multi_cmd @gbp_pq;
}
return opts_opt_multi_cmd @gbp_pq;
}
+sub dgit_privdir () {
+ our $dgit_privdir_made //= ensure_a_playground 'dgit';
+}
+
#---------- remote protocol support, common ----------
# remote push initiator/responder protocol:
#---------- remote protocol support, common ----------
# remote push initiator/responder protocol:
@@
-980,8
+986,8
@@
sub commit_getclogp ($) {
our %commit_getclogp_memo;
my $memo = $commit_getclogp_memo{$objid};
return $memo if $memo;
our %commit_getclogp_memo;
my $memo = $commit_getclogp_memo{$objid};
return $memo if $memo;
- mkpath '.git/dgit';
- my $mclog =
".git/dgit/clog-$objid
";
+
+ my $mclog =
dgit_privdir()."clog
";
runcmd shell_cmd "exec >$mclog", @git, qw(cat-file blob),
"$objid:debian/changelog";
$commit_getclogp_memo{$objid} = parsechangelog("-l$mclog");
runcmd shell_cmd "exec >$mclog", @git, qw(cat-file blob),
"$objid:debian/changelog";
$commit_getclogp_memo{$objid} = parsechangelog("-l$mclog");
@@
-1672,6
+1678,7
@@
our ($dsc_distro, $dsc_hint_tag, $dsc_hint_url);
sub prep_ud () {
sub prep_ud () {
+ dgit_privdir(); # ensures that $dgit_privdir_made is based on $maindir
fresh_playground 'dgit/unpack';
}
fresh_playground 'dgit/unpack';
}
@@
-1709,8
+1716,8
@@
sub remove_stray_gits ($) {
sub mktree_in_ud_from_only_subdir ($;$) {
my ($what,$raw) = @_;
sub mktree_in_ud_from_only_subdir ($;$) {
my ($what,$raw) = @_;
-
# changes into the subdir
# changes into the subdir
+
my (@dirs) = <*/.>;
die "expected one subdir but found @dirs ?" unless @dirs==1;
$dirs[0] =~ m#^([^/]+)/\.$# or die;
my (@dirs) = <*/.>;
die "expected one subdir but found @dirs ?" unless @dirs==1;
$dirs[0] =~ m#^([^/]+)/\.$# or die;
@@
-2057,7
+2064,7
@@
sub generate_commits_from_dsc () {
foreach my $fi (@dfi) {
my $f = $fi->{Filename};
die "$f ?" if $f =~ m#/|^\.|\.dsc$|\.tmp$#;
foreach my $fi (@dfi) {
my $f = $fi->{Filename};
die "$f ?" if $f =~ m#/|^\.|\.dsc$|\.tmp$#;
- my $upper_f = "
../../..
/../$f";
+ my $upper_f = "
$maindir
/../$f";
printdebug "considering reusing $f: ";
printdebug "considering reusing $f: ";
@@
-2376,6
+2383,10
@@
END
local $ENV{GIT_AUTHOR_DATE} = $authline[2];
my $path = $ENV{PATH} or die;
local $ENV{GIT_AUTHOR_DATE} = $authline[2];
my $path = $ENV{PATH} or die;
+
+ # we use ../../gbp-pq-output, which (given that we are in
+ # $playground/PLAYTREE, and $playground is .git/dgit/unpack,
+ # is .git/dgit.
foreach my $use_absurd (qw(0 1)) {
runcmd @git, qw(checkout -q unpa);
foreach my $use_absurd (qw(0 1)) {
runcmd @git, qw(checkout -q unpa);
@@
-3159,7
+3170,7
@@
END
my $author = clogp_authline $useclogp;
my $cversion = getfield $useclogp, 'Version';
my $author = clogp_authline $useclogp;
my $cversion = getfield $useclogp, 'Version';
- my $mcf =
".git/dgit
/mergecommit";
+ my $mcf =
dgit_privdir()."
/mergecommit";
open MC, ">", $mcf or die "$mcf $!";
print MC <<END or die $!;
tree $tree
open MC, ">", $mcf or die "$mcf $!";
print MC <<END or die $!;
tree $tree
@@
-3219,7
+3230,6
@@
END
fetch_from_archive_record_1($hash);
if (defined $skew_warning_vsn) {
fetch_from_archive_record_1($hash);
if (defined $skew_warning_vsn) {
- mkpath '.git/dgit';
printdebug "SKEW CHECK WANT $skew_warning_vsn\n";
my $gotclogp = commit_getclogp($hash);
my $got_vsn = getfield $gotclogp, 'Version';
printdebug "SKEW CHECK WANT $skew_warning_vsn\n";
my $gotclogp = commit_getclogp($hash);
my $got_vsn = getfield $gotclogp, 'Version';
@@
-3258,8
+3268,9
@@
sub setup_mergechangelogs (;$) {
my $driver = 'dpkg-mergechangelogs';
my $cb = "merge.$driver";
my $driver = 'dpkg-mergechangelogs';
my $cb = "merge.$driver";
- my $attrs = '.git/info/attributes';
- ensuredir '.git/info';
+ confess unless defined $maindir;
+ my $attrs = "$maindir_gitcommon/info/attributes";
+ ensuredir "$maindir_gitcommon/info";
open NATTRS, ">", "$attrs.new" or die "$attrs.new $!";
if (!open ATTRS, "<", $attrs) {
open NATTRS, ">", "$attrs.new" or die "$attrs.new $!";
if (!open ATTRS, "<", $attrs) {
@@
-3304,15
+3315,16
@@
sub ensure_setup_existing_tree () {
set_local_git_config $k, 'true';
}
set_local_git_config $k, 'true';
}
-sub open_gitattrs () {
- my $gai = new IO::File ".git/info/attributes"
+sub open_main_gitattrs () {
+ confess 'internal error no maindir' unless defined $maindir;
+ my $gai = new IO::File "$maindir_gitcommon/info/attributes"
or $!==ENOENT
or $!==ENOENT
- or die "open
.git
/info/attributes: $!";
+ or die "open
$maindir_gitcommon
/info/attributes: $!";
return $gai;
}
sub is_gitattrs_setup () {
return $gai;
}
sub is_gitattrs_setup () {
- my $gai = open_gitattrs();
+ my $gai = open_
main_
gitattrs();
return 0 unless $gai;
while (<$gai>) {
return 1 if m{^\[attr\]dgit-defuse-attrs\s};
return 0 unless $gai;
while (<$gai>) {
return 1 if m{^\[attr\]dgit-defuse-attrs\s};
@@
-3332,15
+3344,15
@@
sub setup_gitattrs (;$) {
END
return;
}
END
return;
}
- my $af = "
.git
/info/attributes";
- ensuredir
'.git/info'
;
+ my $af = "
$maindir_gitcommon
/info/attributes";
+ ensuredir
"$maindir_gitcommon/info"
;
open GAO, "> $af.new" or die $!;
print GAO <<END or die $!;
* dgit-defuse-attrs
[attr]dgit-defuse-attrs $negate_harmful_gitattrs
# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)
END
open GAO, "> $af.new" or die $!;
print GAO <<END or die $!;
* dgit-defuse-attrs
[attr]dgit-defuse-attrs $negate_harmful_gitattrs
# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)
END
- my $gai = open_gitattrs();
+ my $gai = open_
main_
gitattrs();
if ($gai) {
while (<$gai>) {
chomp;
if ($gai) {
while (<$gai>) {
chomp;
@@
-3576,6
+3588,7
@@
sub clone ($) {
my $multi_fetched = fork_for_multisuite(sub {
printdebug "multi clone before fetch merge\n";
changedir $dstdir;
my $multi_fetched = fork_for_multisuite(sub {
printdebug "multi clone before fetch merge\n";
changedir $dstdir;
+ record_maindir();
});
if ($multi_fetched) {
printdebug "multi clone after fetch merge\n";
});
if ($multi_fetched) {
printdebug "multi clone after fetch merge\n";
@@
-3590,6
+3603,7
@@
sub clone ($) {
mkdir $dstdir or fail "create \`$dstdir': $!";
changedir $dstdir;
runcmd @git, qw(init -q);
mkdir $dstdir or fail "create \`$dstdir': $!";
changedir $dstdir;
runcmd @git, qw(init -q);
+ record_maindir();
setup_new_tree();
clone_set_head();
my $giturl = access_giturl(1);
setup_new_tree();
clone_set_head();
my $giturl = access_giturl(1);
@@
-3729,7
+3743,7
@@
sub maybe_split_brain_save ($$$) {
my ($headref, $dgitview, $msg) = @_;
# => message fragment "$saved" describing disposition of $dgitview
return "commit id $dgitview" unless defined $split_brain_save;
my ($headref, $dgitview, $msg) = @_;
# => message fragment "$saved" describing disposition of $dgitview
return "commit id $dgitview" unless defined $split_brain_save;
- my @cmd = (shell_cmd
"cd ../../../.."
,
+ my @cmd = (shell_cmd
'cd "$1"; shift', $maindir
,
@git, qw(update-ref -m),
"dgit --dgit-view-save $msg HEAD=$headref",
$split_brain_save, $dgitview);
@git, qw(update-ref -m),
"dgit --dgit-view-save $msg HEAD=$headref",
$split_brain_save, $dgitview);
@@
-3830,8
+3844,7
@@
sub pseudomerge_make_commit ($$$$ $$) {
: !length $overwrite_version ? " --overwrite"
: " --overwrite=".$overwrite_version;
: !length $overwrite_version ? " --overwrite"
: " --overwrite=".$overwrite_version;
- mkpath '.git/dgit';
- my $pmf = ".git/dgit/pseudomerge";
+ my $pmf = dgit_privdir()."/pseudomerge";
open MC, ">", $pmf or die "$pmf $!";
print MC <<END or die $!;
tree $tree
open MC, ">", $pmf or die "$pmf $!";
print MC <<END or die $!;
tree $tree
@@
-4139,7
+4152,7
@@
END
rpush_handle_protovsn_bothends() if $we_are_initiator;
select_tagformat();
rpush_handle_protovsn_bothends() if $we_are_initiator;
select_tagformat();
- my $clogpfn =
".git/dgit
/changelog.822.tmp";
+ my $clogpfn =
dgit_privdir()."
/changelog.822.tmp";
runcmd shell_cmd "exec >$clogpfn", qw(dpkg-parsechangelog);
responder_send_file('parsed-changelog', $clogpfn);
runcmd shell_cmd "exec >$clogpfn", qw(dpkg-parsechangelog);
responder_send_file('parsed-changelog', $clogpfn);
@@
-4215,7
+4228,7
@@
END
changedir $playground;
progress "checking that $dscfn corresponds to HEAD";
runcmd qw(dpkg-source -x --),
changedir $playground;
progress "checking that $dscfn corresponds to HEAD";
runcmd qw(dpkg-source -x --),
- $dscpath =~ m#^/# ? $dscpath : "
../../..
/$dscpath";
+ $dscpath =~ m#^/# ? $dscpath : "
$maindir
/$dscpath";
my ($tree,$dir) = mktree_in_ud_from_only_subdir("source package");
check_for_vendor_patches() if madformat($dsc->{format});
changedir $maindir;
my ($tree,$dir) = mktree_in_ud_from_only_subdir("source package");
check_for_vendor_patches() if madformat($dsc->{format});
changedir $maindir;
@@
-4290,7
+4303,7
@@
END
}
my @tagwants = push_tagwants($cversion, $dgithead, $maintviewhead,
}
my @tagwants = push_tagwants($cversion, $dgithead, $maintviewhead,
-
".git/dgit
/tag");
+
dgit_privdir()."
/tag");
my @tagobjfns;
supplementary_message(<<'END');
my @tagobjfns;
supplementary_message(<<'END');
@@
-4814,7
+4827,7
@@
sub quiltify_dpkg_commit ($$$;$) {
my ($patchname,$author,$msg, $xinfo) = @_;
$xinfo //= '';
my ($patchname,$author,$msg, $xinfo) = @_;
$xinfo //= '';
- mkpath '.git/dgit';
+ mkpath '.git/dgit';
# we are in playtree
my $descfn = ".git/dgit/quilt-description.tmp";
open O, '>', $descfn or die "$descfn: $!";
$msg =~ s/\n+/\n\n/;
my $descfn = ".git/dgit/quilt-description.tmp";
open O, '>', $descfn or die "$descfn: $!";
$msg =~ s/\n+/\n\n/;
@@
-5010,8
+5023,8
@@
END
changedir $maindir;
# When we no longer need to support squeeze, use --create-reflog
# instead of this:
changedir $maindir;
# When we no longer need to support squeeze, use --create-reflog
# instead of this:
- ensuredir "
.git
/logs/refs/dgit-intern";
- my $makelogfh = new IO::File "
.git
/logs/refs/$splitbraincache", '>>'
+ ensuredir "
$maindir_gitcommon
/logs/refs/dgit-intern";
+ my $makelogfh = new IO::File "
$maindir_gitcommon
/logs/refs/$splitbraincache", '>>'
or die $!;
my $oldcache = git_get_ref "refs/$splitbraincache";
or die $!;
my $oldcache = git_get_ref "refs/$splitbraincache";
@@
-5345,7
+5358,7
@@
END
changedir $maindir;
runcmd_ordryrun_local
changedir $maindir;
runcmd_ordryrun_local
- @git, qw(pull --ff-only -q
.git/dgit/unpack/work
master);
+ @git, qw(pull --ff-only -q
), "$playground/work", qw(
master);
}
sub quilt_fixup_mkwork ($) {
}
sub quilt_fixup_mkwork ($) {
@@
-5361,7
+5374,7
@@
sub quilt_fixup_linkorigs ($$) {
my ($upstreamversion, $fn) = @_;
# calls $fn->($leafname);
my ($upstreamversion, $fn) = @_;
# calls $fn->($leafname);
- foreach my $f (<
../../..
/../*>) { #/){
+ foreach my $f (<
$maindir
/../*>) { #/){
my $b=$f; $b =~ s{.*/}{};
{
local ($debuglevel) = $debuglevel-1;
my $b=$f; $b =~ s{.*/}{};
{
local ($debuglevel) = $debuglevel-1;
@@
-5440,12
+5453,12
@@
END
debian/control debian/changelog);
foreach my $maybe (qw(debian/patches debian/source/options
debian/tests/control)) {
debian/control debian/changelog);
foreach my $maybe (qw(debian/patches debian/source/options
debian/tests/control)) {
- next unless stat_exists "
../../..
/$maybe";
+ next unless stat_exists "
$maindir
/$maybe";
push @files, $maybe;
}
my $debtar= srcfn $fakeversion,'.debian.tar.gz';
push @files, $maybe;
}
my $debtar= srcfn $fakeversion,'.debian.tar.gz';
- runcmd qw(env GZIP=-1n tar -zcf), "./$debtar", qw(-C
../../..)
, @files;
+ runcmd qw(env GZIP=-1n tar -zcf), "./$debtar", qw(-C
), $maindir
, @files;
$dscaddfile->($debtar);
close $fakedsc or die $!;
$dscaddfile->($debtar);
close $fakedsc or die $!;
@@
-5488,8
+5501,8
@@
sub quilt_check_splitbrain_cache ($$) {
debugcmd "|(probably)",@cmd;
my $child = open GC, "-|"; defined $child or die $!;
if (!$child) {
debugcmd "|(probably)",@cmd;
my $child = open GC, "-|"; defined $child or die $!;
if (!$child) {
- chdir
'../../..'
or die $!;
- if (!stat "
.git
/logs/refs/$splitbraincache") {
+ chdir
$maindir
or die $!;
+ if (!stat "
$maindir_gitcommon
/logs/refs/$splitbraincache") {
$! == ENOENT or die $!;
printdebug ">(no reflog)\n";
exit 0;
$! == ENOENT or die $!;
printdebug ">(no reflog)\n";
exit 0;
@@
-6059,15
+6072,17
@@
sub cmd_gbp_build {
}
my @cmd = opts_opt_multi_cmd @gbp_build;
}
my @cmd = opts_opt_multi_cmd @gbp_build;
- push @cmd, (qw(-us -uc --git-no-sign-tags), "--git-builder=@dbp");
+ push @cmd, (qw(-us -uc --git-no-sign-tags),
+ "--git-builder=".(shellquote @dbp));
if ($gbp_make_orig) {
if ($gbp_make_orig) {
-
ensuredir '.git/dgit'
;
- my $ok =
'.git/dgit/origs-gen-ok'
;
+
my $priv = dgit_privdir()
;
+ my $ok =
"$priv/origs-gen-ok"
;
unlink $ok or $!==&ENOENT or die $!;
my @origs_cmd = @cmd;
push @origs_cmd, qw(--git-cleaner=true);
unlink $ok or $!==&ENOENT or die $!;
my @origs_cmd = @cmd;
push @origs_cmd, qw(--git-cleaner=true);
- push @origs_cmd, "--git-prebuild=touch $ok .git/dgit/no-such-dir/ok";
+ push @origs_cmd, "--git-prebuild=".
+ "touch ".(shellquote $ok)." ".(shellquote "$priv/no-such-dir/ok");
push @origs_cmd, @ARGV;
if (act_local()) {
debugcmd @origs_cmd;
push @origs_cmd, @ARGV;
if (act_local()) {
debugcmd @origs_cmd;
@@
-6411,6
+6426,15
@@
sub cmd_print_dgit_repos_server_source_url {
print $url, "\n" or die $!;
}
print $url, "\n" or die $!;
}
+sub pre_print_dpkg_source_ignores {
+ not_necessarily_a_tree();
+}
+sub cmd_print_dpkg_source_ignores {
+ badusage "no arguments allowed to dgit print-dpkg-source-ignores"
+ if @ARGV;
+ print "@dpkg_source_ignores\n" or die $!;
+}
+
sub cmd_setup_mergechangelogs {
badusage "no arguments allowed to dgit setup-mergechangelogs" if @ARGV;
local $isuite = 'DGIT-SETUP-TREE';
sub cmd_setup_mergechangelogs {
badusage "no arguments allowed to dgit setup-mergechangelogs" if @ARGV;
local $isuite = 'DGIT-SETUP-TREE';