summaryrefslogtreecommitdiff
path: root/dgit
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2015-07-04 22:01:39 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2015-07-04 22:16:59 +0100
commitd2c91253e64e144d17d0f5a0ce9c72661c43a29c (patch)
treeea1bfeda1a2b243b5e4e7582c6bac3ae54278a21 /dgit
parent62cdc56219b149617af4d303c782f3b37e22a529 (diff)
dgit: Set up a merge driver for debian/changelog. Closes:#769291.
Diffstat (limited to 'dgit')
-rwxr-xr-xdgit28
1 files changed, 28 insertions, 0 deletions
diff --git a/dgit b/dgit
index 802d791..73184fb 100755
--- a/dgit
+++ b/dgit
@@ -1481,6 +1481,33 @@ sub set_local_git_config ($$) {
runcmd @git, qw(config), $k, $v;
}
+sub setup_mergechangelogs () {
+ my $driver = 'dpkg-mergechangelogs';
+ my $cb = "merge.$driver";
+ my $attrs = '.git/info/attributes';
+ ensuredir '.git/info';
+
+ open NATTRS, ">", "$attrs.new" or die "$attrs.new $!";
+ if (!open ATTRS, "<", $attrs) {
+ $!==ENOENT or die "$attrs: $!";
+ } else {
+ while (<ATTRS>) {
+ chomp;
+ next if m{^debian/changelog\s};
+ print NATTRS $_, "\n" or die $!;
+ }
+ ATTRS->error and die $!;
+ close ATTRS;
+ }
+ print NATTRS "debian/changelog merge=$driver\n" or die $!;
+ close NATTRS;
+
+ set_local_git_config "$cb.name", 'debian/changelog merge driver';
+ set_local_git_config "$cb.driver", 'dpkg-mergechangelogs -m %O %A %B %A';
+
+ rename "$attrs.new", "$attrs" or die "$attrs: $!";
+}
+
sub clone ($) {
my ($dstdir) = @_;
canonicalise_suite();
@@ -1510,6 +1537,7 @@ sub clone ($) {
$vcsgiturl =~ s/\s+-b\s+\S+//g;
runcmd @git, qw(remote add vcs-git), $vcsgiturl;
}
+ setup_mergechangelogs();
runcmd @git, qw(reset --hard), lrref();
printdone "ready for work in $dstdir";
}