From: Ian Jackson Date: Sat, 4 Jul 2015 21:01:39 +0000 (+0100) Subject: dgit: Set up a merge driver for debian/changelog. Closes:#769291. X-Git-Tag: debian/0.30~13 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=commitdiff_plain;h=d2c91253e64e144d17d0f5a0ce9c72661c43a29c;hp=62cdc56219b149617af4d303c782f3b37e22a529;ds=sidebyside dgit: Set up a merge driver for debian/changelog. Closes:#769291. --- diff --git a/debian/changelog b/debian/changelog index 49b8777a..9e8f5729 100644 --- a/debian/changelog +++ b/debian/changelog @@ -97,6 +97,7 @@ dgit (0.23~) unstable; urgency=low * For non-Debian distros, debiantag() uses distro name a la DEP-14. * dgit: Be more careful about tag updates during fetch: only update tags referring to uploads to distro we are trying to fetch from. + * dgit: Set up a merge driver for debian/changelog. Closes:#769291. -- diff --git a/dgit b/dgit index 802d791f..73184fbd 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 () { + 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"; }