diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2015-07-04 22:01:39 +0100 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2015-07-04 22:16:59 +0100 |
commit | d2c91253e64e144d17d0f5a0ce9c72661c43a29c (patch) | |
tree | ea1bfeda1a2b243b5e4e7582c6bac3ae54278a21 | |
parent | 62cdc56219b149617af4d303c782f3b37e22a529 (diff) |
dgit: Set up a merge driver for debian/changelog. Closes:#769291.
-rw-r--r-- | debian/changelog | 1 | ||||
-rwxr-xr-x | dgit | 28 |
2 files changed, 29 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog index 49b8777..9e8f572 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. -- @@ -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"; } |