git (1:2.19.1-1~bpo9+1) stretch-backports; urgency=high

  * merge branch debian-sid.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 05 Oct 2018 10:29:07 -0700

git (1:2.19.1-1) unstable; urgency=high

  * new upstream point release (see RelNotes/2.19.1.txt,
    CVE-2018-17456).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 05 Oct 2018 10:10:45 -0700

git (1:2.19.0-1~bpo9+1) stretch-backports; urgency=low

  * merge branch debian-sid.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 26 Sep 2018 19:23:09 -0700

git (1:2.19.0-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.19.0.txt).
  * debian/patches/0001-*, 0002-*: remove; applied upstream.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 10 Sep 2018 13:33:45 -0700

git (1:2.19.0~rc2-2) unstable; urgency=low

  * debian/patches:
    * 0001-http-backend-allow-empty-CONTENT_LENGTH: new from
      upstream: http-backend: treat empty CONTENT_LENGTH as absent
      (closes: #907587).
    * 0002-Revert-Merge-branch-sb-submodule-core-worktree.diff: new
      from upstream: stop setting and unsetting core.worktree in
      submodules, since the code to do so does not handle submodules
      with an embedded .git directory (thx Allan Sandfeld Jensen).

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 09 Sep 2018 19:08:55 -0700

git (1:2.19.0~rc2-1) unstable; urgency=low

  * new upstream release candidate.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 04 Sep 2018 15:47:54 -0700

git (1:2.19.0~rc1-1) unstable; urgency=low

  * new upstream release candidate (see RelNotes/2.19.0.txt).
  * debian/control: Standards-Version: 4.1.5.0.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 28 Aug 2018 13:48:50 -0700

git (1:2.18.0-1~bpo9+1) stretch-backports; urgency=low

  * merge branch debian-sid.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 02 Jul 2018 14:17:27 -0700

git (1:2.18.0-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.18.0.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 21 Jun 2018 15:25:50 -0700

git (1:2.18.0~rc2-2) unstable; urgency=low

  * debian/control: Breaks: dgit (<< 5.1~) that lacks support
    for working-tree-encoding attribute (thx Ian Jackson;
    closes: #901897).

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 20 Jun 2018 10:22:51 -0700

git (1:2.18.0~rc2-1) unstable; urgency=low

  * new upstream release candidate.
  * debian/README.emacs: describe removed emacs support.
  * debian/control: package git-el: describe transitional
    modules; Recommends: elpa-magit.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 18 Jun 2018 09:19:59 -0700

git (1:2.17.1-1~bpo9+1) stretch-backports; urgency=high

  * merge branch debian-sid.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 29 May 2018 09:52:00 -0700

git (1:2.17.1-1) unstable; urgency=high

  * new upstream point release to fix CVE-2018-11235, arbitary code
    execution via submodule names in .gitmodules (see RelNotes/2.17.1.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 28 May 2018 17:37:54 -0700

git (1:2.17.0-1~bpo9+1) stretch-backports; urgency=low

  * debian/control: avoid build-time dependency on asciidoc version
    that is not available in stretch:
    * debian/patches/Normalize-generated-asciidoc-timestamps-...diff:
      use SOURCE_DATE_EPOCH in "last updated" footer (thx Anders
      Kaseorg; see #782294).
    * debian/control: remove build-time dependency on version of
      asciidoc that supports SOURCE_DATE_EPOCH natively.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 25 May 2018 23:41:06 -0700

git (1:2.17.0-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.17.0.txt).
  * debian/rules: add NO_USE_CPAN_FALLBACKS=1 to OPTS to avoid
    installing bundled copies of perl modules.
  * debian/control: Build-Depends: libmailtools-perl, liberror-perl;
    git-email: Depends: libmailtools-perl for Mail::Address.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 02 Apr 2018 12:58:14 -0700

git (1:2.16.3-1) unstable; urgency=low

  * new upstream point release (see RelNotes/2.16.3.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 23 Mar 2018 09:56:37 -0700

git (1:2.16.2-1) unstable; urgency=low

  * new upstream point release (see RelNotes/2.16.2.txt).
  * debian/control: correct spelling of openssh-client in Breaks
    relation.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 23 Feb 2018 13:53:02 -0800

git (1:2.16.1-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.16.txt, RelNotes/2.16.1.txt).
  * debian/control: Breaks: openssh-client (<< 1:6.8) since the latter
    lacks support for the "-G" option (thx Bryan Turner; see
    https://crbug.com/git/7).
  * debian/patches/git-gui-Sort-entries-in-optimized-tclIndex.diff:
    remove; applied upstream.
  * debian/rules: do not install contrib/**/.gitattributes to
    /usr/share/doc (thx Paul Wise and Bastien Roucaries for suggesting
    it through lintian).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 05 Feb 2018 12:27:37 -0800

git (1:2.15.1-3) unstable; urgency=low

  * debian/rules: remove remnants of git-core package that prevented
    building twice in a row (thx Andreas Beckmann; closes: #884890).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 22 Dec 2017 17:13:42 -0800

git (1:2.15.1-2) unstable; urgency=low

  * gitweb: Recommends: 'apache2 (>= 2.4.6-4~) | lynx | httpd' instead
    of ... | lynx-cur | ... (thx Łukasz Zemczak; see #490265).
  * debian/control: Standards-Version: 4.1.2.0.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 18 Dec 2017 09:45:31 -0800

git (1:2.15.1-1) unstable; urgency=low

  * new upstream point release (see RelNotes/2.15.1.txt).
  * debian/control: Build-Depends-Indep: asciidoc (>= 8.6.10).
  * debian/control: Standards-Version: 4.1.1.1.
  * debian/patches:
    * Normalize-generated-asciidoc-timestamps-...diff: remove; no
      longer needed (thx Anders Kaseorg; see #782294).
    * git-gui-Sort-entries-in-optimized-tclIndex.diff: update to
      upstream version.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 29 Nov 2017 13:49:38 -0800

git (1:2.15.0-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.15.0.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 30 Oct 2017 10:56:56 -0700

git (1:2.15.0~rc2-1) unstable; urgency=low

  * new upstream release candidate.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 23 Oct 2017 10:15:45 -0700

git (1:2.15.0~rc1-1) unstable; urgency=low

  * new upstream release candidate.
  * remove transitional git-core package (thx Holger Levsen;
    closes: #878189).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 16 Oct 2017 09:29:08 -0700

git (1:2.15.0~rc0-1) unstable; urgency=low

  * new upstream release candidate (see RelNotes/2.15.0.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 09 Oct 2017 10:13:35 -0700

git (1:2.14.2-1) unstable; urgency=high

  * new upstream point release (see RelNotes/2.14.1.txt).  Among other
    changes, this fixes a remote shell command execution vulnerability
    via CVS protocol:
    - git-shell: drop cvsserver support by default
    - git-cvsserver: harden backtick captures against user input

  Thanks to joernchen of Phenoelit for discovering, reporting, and
  fixing this vulnerability, and to Junio C Hamano and Jeff King for
  the fixes to related issues.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 25 Sep 2017 18:23:18 -0700

git (1:2.14.1-3) unstable; urgency=low

  * git.README.Debian: remove obsolete instructions about setting up a
    server to handle rsync:// protocol.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 28 Aug 2017 10:08:04 -0700

git (1:2.14.1-2) unstable; urgency=low

  * debian/control: git-daemon-sysvinit: Priority: optional.
  * debian/control: clarify how to decide between git-daemon-run and
    git-daemon-sysvinit in package descriptions.
  * debian/control: Standards-Version: 4.0.1.0.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 14 Aug 2017 12:14:32 -0700

git (1:2.14.1-1) unstable; urgency=high

  * new upstream point release to fix CVE-2017-1000117, arbitrary
    code execution issues via URLs (see RelNotes/2.14.1.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 10 Aug 2017 09:16:20 -0700

git (1:2.14.0-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.14.0.txt).
  * debian/patches/0001-pre-rebase-hook-capture-documentation-...diff:
    remove; applied upstream.
  * build against PCRE v2 if available at build time (thx to Ævar
    Arnfjörð Bjarmason for the suggestion).  Build-Depends:
    libpcre2-dev | libpcre3-dev.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 07 Aug 2017 11:31:25 -0700

git (1:2.13.3-1) unstable; urgency=low

  * new upstream point release (see RelNotes/2.13.3.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 17 Jul 2017 12:16:44 -0700

git (1:2.13.2-3) unstable; urgency=low

  * remove git-arch package.  It depended on GNU Arch, which has not
    been maintained upstream for more than 10 years (thx Adrian
    Bunk; closes: #866059).
  * debian/rules: do not allow flaky git-svn tests t9128.4 or t9167.3
    to cause the build to fail, either (closes: #865789).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 30 Jun 2017 16:11:06 -0700

git (1:2.13.2-2) unstable; urgency=low

  * git-email: use perl in dependency instead of perl-modules (thx
    Damyan Ivanov for suggesting it through lintian).
  * debian/rules: do not allow flaky git-svn test t9128.3 to cause
    the build to fail (closes: #865789).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 26 Jun 2017 15:17:48 -0700

git (1:2.13.2-1) unstable; urgency=low

  * new upstream point release (see RelNotes/2.13.2.txt).
  * git-email: Depends: perl-modules (>> 5.21.5) | libnet-smtp-ssl-perl
    for starttls support instead of unconditionally requiring
    Net::SMTP::SSL (thx Dennis Kaarsemaker).
  * debian/rules: skip HTML documentation generation when
    DEB_BUILD_OPTIONS=nodoc.
  * debian/copyright: use https form of Format URL.
  * debian/control: Standards-Version: 4.0.0.0.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 26 Jun 2017 11:47:14 -0700

git (1:2.13.1-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.12.0.txt, RelNotes/2.13.0.txt).
  * debian/patches/xdiff-Do-not-enable-XDF_FAST_HASH-by-default.diff,
    shell-disallow-repo-names-beginning-with-dash.patch: remove; applied
    upstream.
  * update debian/copyright
  * debian/rules: run tests once and always produce verbose output.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 21 Jun 2017 15:42:17 -0700

git (1:2.11.0-4) unstable; urgency=low

  [ Alan Jenkins ]
  * git: remove Recommends: rsync (closes #862435).
  * git-arch: Depends: rsync.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 15 May 2017 12:13:38 -0700

git (1:2.11.0-3) unstable; urgency=high

  * Do not allow git helpers run via git-shell to launch a pager
    (CVE-2017-8386).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 09 May 2017 16:23:17 -0700

git (1:2.11.0-2) unstable; urgency=medium

  * gitweb: Depends: libcgi-pm-perl; Build-Depends: libcgi-pm-perl
    (thx Mikko Rasa; closes: #847961).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 27 Dec 2016 15:17:12 -0800

git (1:2.11.0-1) unstable; urgency=medium

  * New upstream release (see RelNotes/2.11.0.txt).
  * debian/patches/git-sh-setup-Restore-sourcability-from-outside-script.diff:
    remove; applied upstream.
  * Replace
    debian/patches/Documentation-omit-asciidoc-footer-on-generated-input.diff
    with the more upstreamable
    debian/patches/Normalize-generated-asciidoc-timestamps-with-SOURCE_D.diff.
  * debian/patches/git-gui-Sort-entries-in-optimized-tclIndex.diff,
    debian/patches/xdiff-Do-not-enable-XDL_FAST_HASH-by-default.diff:
    Further improvements to build reproducibility.

 -- Anders Kaseorg <andersk@mit.edu>  Wed, 30 Nov 2016 23:34:59 -0500

git (1:2.10.2-3) unstable; urgency=medium

  * debian/rules: Split override_dh_installdocs into -arch and -indep
    parts.  (Closes: #843393)

 -- Anders Kaseorg <andersk@mit.edu>  Wed, 16 Nov 2016 16:12:02 -0500

git (1:2.10.2-2) unstable; urgency=medium

  * Add missing upstream changelog entries from v2.10.2.
  * gitweb: Add version to Breaks: apache2.2-common (<< 2.3~).
  * git-mediawiki: Shorten description.
  * Link extra license files to common-licenses.
  * Invoke dpkg-maintscript-helper dir_to_symlink correctly.
    (Closes: #843011)
  * debian/patches/Documentation-omit-asciidoc-footer-on-generated-input.diff:
    Omit the “last updated” footer when processing asciidoc inputs that
    are generated at build time.  (Closes: #813912)

 -- Anders Kaseorg <andersk@mit.edu>  Sat, 05 Nov 2016 07:20:14 -0400

git (1:2.10.2-1) unstable; urgency=medium

  * New upstream point release (see RelNotes/2.10.2.txt).
    - imap-send: Tell cURL to use imap:// or imaps:// (Closes: #648329)
  * Run asciidoc in TZ=UTC to improve the reproducibility of documentation
    footer timestamps.
  * debian/patches/git-sh-setup-Restore-sourcability-from-outside-script.diff:
    Restore sourcability of git-sh-setup from outside scripts.
    (Closes: #842477)

 -- Anders Kaseorg <andersk@mit.edu>  Sat, 29 Oct 2016 22:44:37 -0400

git (1:2.10.1-1) unstable; urgency=medium

  * New upstream release (see RelNotes/2.10.0.txt, RelNotes/2.10.1.txt).
    (Closes: #840800)
  * debian/rules: Fix clean target to remove GIT-VERSION-FILE and
    contrib/subtree build products.  (Closes: #834870)
  * Fix a missing reference in /usr/share/doc-base/everyday-git.
    (Closes: #836516)
  * Migrate patches to 3.0 (quilt) format.  (Closes: #834566)
  * Migrate packaging to Debhelper.  (Closes: #834886)
  * Replace perl-modules dependency with perl.
  * git-daemon-sysvinit: Depend lsb-base (>= 3.0-6) for
    /lib/lsb/init-functions.

 -- Anders Kaseorg <andersk@mit.edu>  Fri, 14 Oct 2016 21:47:15 -0400

git (1:2.9.3-1) unstable; urgency=medium

  * New upstream release (see RelNotes/2.8.2.txt, RelNotes/2.8.3.txt,
    RelNotes/2.9.0.txt, RelNotes/2.9.1.txt, RelNotes/2.9.2.txt,
    RelNotes/2.9.3.txt).

 -- Anders Kaseorg <andersk@mit.edu>  Tue, 16 Aug 2016 16:32:47 -0400

git (1:2.8.1-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/0003-0007-srv-be-more-tolerant-of-broken-DNS-replies.diff:
    remove.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 18 Apr 2016 17:23:33 -0700

git (1:2.8.0~rc3-1) unstable; urgency=medium

  * new upstream release candidate (see RelNotes/2.8.0.txt).
    * harden against on-stack and on-heap buffer overflows (CVE-2016-2324,
      CVE-2016-2315; closes: #818318).
  * debian/git.docs: update for README -> README.md renaming.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 16 Mar 2016 18:28:12 -0700

git (1:2.7.0-1) unstable; urgency=low

  * new upstream release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 19 Jan 2016 11:04:08 -0800

git (1:2.7.0~rc3-1) unstable; urgency=low

  * new upstream release candidate (see RelNotes/2.7.0.txt).
  * debian/control: Standards-Version: 3.9.6.0.
  * debian/control: use HTTPS for Homepage URL.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 04 Jan 2016 12:25:50 -0800

git (1:2.6.4-1) unstable; urgency=medium

  * new upstream point release (see RelNotes/2.6.4.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 10 Dec 2015 16:07:19 -0800

git (1:2.6.3-1) unstable; urgency=medium

  * new upstream point release (see RelNotes/2.6.3.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 08 Dec 2015 12:02:26 -0800

git (1:2.6.2-1) unstable; urgency=low

  * new upstream point release (see RelNotes/2.6.2.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 23 Oct 2015 11:52:44 -0700

git (1:2.6.1-1) unstable; urgency=high

  * new upstream point release (see RelNotes/2.6.1.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 05 Oct 2015 11:16:05 -0700

git (1:2.6.0-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.6.0.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 29 Sep 2015 12:55:19 -0700

git (1:2.5.3-1) unstable; urgency=medium

  * new upstream point release (see RelNotes/2.5.2.txt, 2.5.3.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 18 Sep 2015 12:36:49 -0700

git (1:2.5.1-1) unstable; urgency=medium

  * new upstream point release (see RelNotes/2.5.1.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 28 Aug 2015 14:27:25 -0700

git (1:2.5.0-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.5.0.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 28 Jul 2015 10:47:13 -0700

git (1:2.4.6-1) unstable; urgency=medium

  * new upstream release (see RelNotes/2.[234].*.txt).
  * debian/rules: use install-html target for git-subtree docs
    (see #768795).
  * gitweb: Pre-Depends: dpkg 1.16.1 for -noawait support.
  * gitweb.apache2.conf: make configuration conditional on MIME
    support (thx Uwe Storbeck; closes: #775236).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 21 Jul 2015 12:08:09 -0700

git (1:2.1.4-2.1) unstable; urgency=medium

  * Non-maintainer upload.
  * Use interest-noawait triggers for gitweb to avoid a
    trigger cycle.  (Closes: #774607)

 -- Niels Thykier <niels@thykier.net>  Mon, 02 Feb 2015 19:42:37 +0100

git (1:2.1.4-2) unstable; urgency=medium

  * update gitweb configuration for Apache 2.4:
    * apache2.conf:
      * make configuration conditional on CGI and alias support.
      * put explicit '+' before FollowSymLinks option.
    * README.Debian: update with new configuration file path.
      Mention CGI support requirement.
    * prerm: fix typo in last line (it should be "fi", not "then").
    * update version number in conffile handling code to handle
      upgrades within testing.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 19 Dec 2014 17:52:50 -0800

git (1:2.1.4-1) unstable; urgency=medium

  * new upstream point release (CVE-2014-9390).
    * checkout: tighten exit code handling on errors.
    * avoid writing filenames to the work tree that some filesystems
      do not distinguish from ".git".
      * reject ".gIt" and other path components that case-fold
        to ".git" in "git checkout", "git add", and "git fsck".
      * new '[core] protectHFS' setting to reject path components
        such as ".Git\u200f" that HFS+ folds to ".git" in
        "git checkout" and "git add".  Always reject such paths
        in "git fsck".  (U+200F is the Unicode right-to-left
        mark.)
      * new '[core] protectNTFS' setting to reject path components
        such as ".Git " that NTFS folds to ".git" in "git checkout"
        and "git add".  Always reject such paths in "git fsck".
  * gitweb: use apache 2.4-compatible configuration (thx Jean-Michel
    Nirgal Vourgère for advice; closes: #669292).
    * rules, conffiles: Apache configuration goes in
      /etc/apache2/conf-available, not conf.d.
    * preinst, postinst, postrm: use dpkg-maintscript-helper to
      rename the conffile and preserve local changes.
    * postinst, prerm, postrm: use apache2-maintscript-helper if
      present to load and unload gitweb configuration.
    * implicit: check for debian/$pkg.triggers.
    * triggers: re-run postinst when apache2-maintscript-helper is
      installed.
    * control:
      * Pre-Depends: dpkg 1.15.8 for dpkg-maintscript-helper.
      * Breaks: apache2.2-common because the Apache configuration
        requires version 2.4.
  * debian/diff/0009-git-svn-use-SVN-Ra-get_dir2-when-possible.diff:
    new from upstream: git svn: use get_dir2 instead of get_dir when
    possible (thx Eric Wong; works around: #767530).
  * debian/diff/0010-gitweb-hack-around-CGI-s-list-context-...diff:
    new from upstream: gitweb: be explicit about use of param() in list
    context, avoiding log noiose with libcgi-pm-perl >= 4.08 and a test
    failure in t9500-gitweb-standalone-no-errors.sh (thx Reiner
    Herrmann; closes: #770655).
  * correct spelling of Roland Mas's name in the 1:2.1.3-1 changelog
    entry.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 19 Dec 2014 15:55:34 -0800

git (1:2.1.3-1) unstable; urgency=low

  * new upstream point release.
    * config --add: avoid segfault when key already has an empty value.
    * remote-http: avoid failure due to command line length limits when
      pushing many refs.
    * fast-import: avoid segfault when trying to clear root tree.
    * index-pack: reliably detect and error out when encountering
      duplicate delta base.
    * gc: do not prune objects only reachable from HEAD .
    * fsck: be more consistent about exiting nonzero for corruption.
    * am: tighten check for mbox 'From ' line.
    * daemon: fix error message when bind() fails.
    * mergetool: fix --output handling in meld >= 3.12 (see GNOME
      bug 737869).
    * gitweb: use start_form instead of startform for compatibility
      with CGI.pm 4.04 and newer (thx Roland Mas; closes: #765525).
    * pack-objects: do not write invalid bitmaps when hitting pack
      size limit.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 04 Nov 2014 13:20:39 -0800

git (1:2.1.1-1) unstable; urgency=low

  * new upstream point release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 22 Sep 2014 17:56:49 -0700

git (1:2.1.0-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.1.0.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 15 Aug 2014 16:09:26 -0700

git (1:2.1.0~rc1-1) unstable; urgency=low

  * new upstream release candidate.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 05 Aug 2014 13:59:00 -0700

git (1:2.0.1-1) unstable; urgency=low

  * new upstream point release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 25 Jun 2014 15:09:25 -0700

git (1:2.0.0-2) unstable; urgency=low

  * debian/rules: drop obsolete THREADED_DELTA_SEARCH setting.
  * debian/rules: add SANE_TOOL_PATH= INSTALL=install TAR=tar to
    OPTS to fix the Dyson build (thx Игорь Пашев; closes:
    #734097).
  * debian/rules: remove NO_PYTHON=1 now that the git_remote_helpers
    library has been removed.
  * debian/rules: remove git-p4 and its documentation from the git,
    git-man, and git-doc packages.  It depends on Perforce, which is
    not part of Debian.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 17 Jun 2014 16:17:46 -0700

git (1:2.0.0-1) unstable; urgency=low

  * new upstream release (see RelNotes/2.0.0.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 28 May 2014 16:06:41 -0700

git (1:2.0.0~rc4-1) unstable; urgency=low

  * new upstream release candidate.
  * remove source-highlight build dependency since the markup
    requiring it was removed upstream (thx Anders Kaserog;
    LP: #1316810).
  * remove git-bzr package to make room for a package built from
    https://github.com/felipec/git-remote-bzr.
    * debian/control: remove references to git-bzr package.
    * debian/control: remove Build-Depends: bzr, python-bzrlib.
    * debian/rules: remove rules to build, install, and clean
      git-remote-bzr.
    * debian/git-doc.docs: do not install git-remote-bzr.html.
    * debian/git-remote-bzr.txt, debian/git-bzr.postinst,
      debian/git-bzr.prerm, debian/git-bzr.README.Debian: remove.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 21 May 2014 11:34:56 -0700

git (1:2.0.0~rc2-1) unstable; urgency=low

  * new upstream release candidate.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 05 May 2014 17:25:50 -0700

git (1:2.0.0~rc0-2) unstable; urgency=low

  [ Anders Kaseorg ]
  * add source-highlight build dependency (closes: #745591).

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 23 Apr 2014 11:09:25 -0700

git (1:2.0.0~rc0-1) unstable; urgency=low

  * new upstream release candidate.
  * debian/diff/0009-contrib-subtree-unset-prefix-before-....diff:
    remove; applied upstream.
  * update debian/copyright.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 18 Apr 2014 17:01:04 -0700

git (1:1.9.2-1) unstable; urgency=low

  * new upstream point release.
    * wt-status: subject full label string to l10n (thx Raphaël
      Hertzog; closes: #725777).

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 09 Apr 2014 15:15:18 -0700

git (1:1.9.1-1) unstable; urgency=low

  * new upstream point release.

  [ Jonathan Nieder ]
  * git-email: Recommends: libio-socket-ssl-perl (>= 1.951) since
    earlier versions do not use OpenSSL's defaults when ca_path
    and ca_file are unset.

  [ Gilles Filippini ]
  * install git-subtree from contrib (closes: #704652).
  * debian/diff/0009-contrib-subtree-unset-prefix-before-proceeding.diff:
    new; unset the 'prefix' environment variable before proceeding.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 18 Mar 2014 15:58:46 -0700

git (1:1.9.0-1) unstable; urgency=low

  * new upstream release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 18 Feb 2014 08:31:49 -0800

git (1:1.9.0~rc3-1) unstable; urgency=low

  * new upstream release candidate.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 07 Feb 2014 15:53:52 -0800

git (1:1.9~rc1-1) unstable; urgency=low

  * new upstream release candidate.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 27 Jan 2014 14:07:56 -0800

git (1:1.9~rc0-1) unstable; urgency=low

  * new upstream release candidate.
  * debian/diff:
    * 0001-remove-interpreter-line-from-shell-libraries.diff:
      remove; applied upstream.
    * 0002...0009: rename to 0001-*, ..., 0008-*.
    * 0010-git-remote-mediawiki-do-not-remove-installed-...diff:
      remove; applied upstream.
  * debian/rules install: no more need to include DESTDIR in
    mw-to-git INSTLIBDIR.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 27 Jan 2014 13:05:17 -0800

git (1:1.8.5.3-1) unstable; urgency=low

  * new upstream point release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 16 Jan 2014 16:18:25 -0800

git (1:1.8.5.2-2) unstable; urgency=low

  * /etc/bash_completion.d/git-prompt: check for git-sh-prompt
    and do not source it if git is removed but not purged (thx
    Craig Small; closes: #726669).
  * debian/control: package git Breaks: git-buildpackage versions
    that rely on output from 'git status' without the --porcelain
    flag (closes: #734223).

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 09 Jan 2014 14:46:23 -0800

git (1:1.8.5.2-1) unstable; urgency=low

  * new upstream point release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 17 Dec 2013 16:31:01 -0800

git (1:1.8.5.1-1) unstable; urgency=medium

  * new upstream point release.
    * submodule: do not copy unknown update mode from .gitmodules.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 03 Dec 2013 14:12:55 -0800

git (1:1.8.5-1) unstable; urgency=low

  * new upstream release.
  * merge branch debian-experimental.
  * git-daemon-sysvinit: advertise GIT_DAEMON_BASE_PATH in
    /etc/default/git-daemon (thx Alexander Dahl and Antonio
    Ospite; closes: #704985).

 -- Jonathan Nieder <jrnieder@gmail.com>  Sat, 30 Nov 2013 11:28:02 -0800

git (1:1.8.5~rc3-1) experimental; urgency=low

  * new upstream release candidate.

  [ Anders Kaseorg ]
  * debian/rules: pass $(OPTS) to contrib/mw-to-git/Makefile
    (closes: #729763).

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 21 Nov 2013 16:35:29 -0800

git (1:1.8.5~rc2-1) experimental; urgency=low

  * merge branch debian-sid.
  * new upstream release candidate.

  [ Thorsten Glaser ]
  * package mw-to-git (closes: #718395).
    * debian/control: new package git-mediawiki; Depends:
      libmediawiki-api-perl (>= 0.39), liblwp-protocol-https-perl,
      libdatetime-format-iso8601-perl; package git now Suggests
      and git-all Depends: git-mediawiki.
    * debian/rules: build and install Git::Mediawiki perl module,
      mediawiki remote helper, and 'git mw' command in
      git-mediawiki package.
    * debian/diff/0010-git-remote-mediawiki-do-not-remove-...diff:
      new from upstream: mw-to-git: do not remove installed files
      in "clean" target.
    * debian/git-mediawiki.docs: install git-remote-mediawiki.txt.

  [ Anders Kaseorg ]
  * debian/diff/0003-transport-expose-git_tcp_connect-...diff:
    include tcp.h before using tcp functions (closes: #728508).

  [ Jonathan Nieder ]
  * debian/diff/0012-cvsserver-Determinize-output-to-...diff:
    remove; applied upstream.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 13 Nov 2013 16:12:29 -0800


git (1:1.8.4.4-1) unstable; urgency=low

  * new upstream point release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 21 Nov 2013 17:51:36 -0800

git (1:1.8.4.3-1) unstable; urgency=low

  * new upstream point release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 11 Nov 2013 15:51:10 -0800

git (1:1.8.5~rc0-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff:
    * 0001-hooks-post-receive-email-set-encoding-to-utf-8.diff,
      0002-post-receive-email-defend-against-non-utf8-...diff:
      remove; applied upstream.
    * 0003...0012: rename to 0001-*, ..., 0010-*.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 30 Oct 2013 16:01:15 -0700

git (1:1.8.4.2-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/0012-cvsserver-Determinize-output-to-...diff:
    new from upstream: sort cvsserver output to combat Perl 5.18
    hash randomization (thx Anders Kaseorg; closes: #727226).

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 30 Oct 2013 16:00:07 -0700

git (1:1.8.4.1-1) unstable; urgency=low

  * merge branch debian-experimental.
  * new upstream point release.
  * debian/control: Build-Depends tcl instead of tcl8.5
    (closes: #725961).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 21 Oct 2013 11:46:45 -0700

git (1:1.8.4-1) experimental; urgency=low

  * new upstream release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sat, 24 Aug 2013 14:50:38 -0700

git (1:1.8.4~rc4-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff/0012-*, 0013-*: remove; applied upstream.
  * debian/rules: define .NOTPARALLEL to avoid races between
    "make" child processes (thx Anders Kaseorg; closes: #720274).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 19 Aug 2013 22:41:08 -0700

git (1:1.8.4~rc3-1) unstable; urgency=low

  * new upstream release candidate.
    * switch de translation from pure German to German+English.
  * debian/diff/:
    * 0012-Revert-git-stash-avoid-data-loss-when-....diff: new
      from upstream: stash: omit too-slow check for files
      replaced by directories before stashing.
    * 0013-Revert-Add-new-shortcut-for-HEAD.diff: new from
      upstream: treat "@" and names like "refs/heads/@/foo" as
      ordinary refnames again.
  * debian/control: Vcs-Git: https://repo.or.cz/r/git/debian.git/
    (thx brian m. carlson; closes: #719932).
  * debian/git.README.source: suggest developing against
    https://repo.or.cz/r/git/debian.git/.
  * debian/watch: use xz-compressed tars from kernel.org again.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 18 Aug 2013 03:41:49 -0700

git (1:1.8.4~rc2-1) unstable; urgency=low

  * new upstream release candidate.
    * cat-file: do not split --batch input lines on whitespace
      (thx Joey Hess; closes: #718517).

 -- Jonathan Nieder <jrnieder@gmail.com>  Sat, 10 Aug 2013 12:25:45 -0700

git (1:1.8.4~rc1-1) unstable; urgency=low

  * new upstream release candidate.
  * debian/watch: point to code.google.com again.
  * debian/git.preinst:
    * check that targets in /var/cache/git/* exist when
      creating symlinks from /var/lib/git/ (thx Steve Cotton and
      Christoph Anton Mitterer; closes: #718411).
    * remove spurious '/var/lib/git/*' symlink from the upgrade
      to 1:1.8.4~rc0-1.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 01 Aug 2013 23:14:58 -0700

git (1:1.8.4~rc0-1) unstable; urgency=low

  * new upstream release candidate.
  * use /var/lib/git instead of /var/cache/git as default git
    project root to comply with the Filesystem Hierarchy Standard
    (thx Julian Gilbey; closes: #483788):
    * git-daemon.default, git-daemon.in, git-daemon/run: use
      base path of /var/lib and projectroot of /var/lib/git.
    * gitweb.conf: $projectroot = "/var/lib/git".
    * rules: package git: install empty /var/lib/git directory
      instead of /var/cache/git.
    * git.README.Debian, git-daemon-run.README.Debian,
      git-daemon-sysvinit.README.Debian, gitweb.README.Debian:
      update for the new project root.
    * git.preinst: install symlinks /var/lib/git/* ->
      ../../cache/git/*.
    * git.NEWS.Debian: advertise the change and explain how to
      adapt to it.
  * update debian/copyright.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 30 Jul 2013 19:11:14 -0700

git (1:1.8.3.2-1) unstable; urgency=low

  * new upstream point release (see RelNotes/1.8.3.2.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 01 Jul 2013 19:20:03 -0700

git (1:1.8.3.1-1) unstable; urgency=low

  * merge branch debian-experimental
  * new upstream point release (see RelNotes/1.8.3.1.txt).
  * debian/watch: use xz-compressed tarballs from kernel.org.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 12 Jun 2013 07:50:53 -0700

git (1:1.8.3-1) experimental; urgency=low

  * new upstream release (see RelNotes/1.8.3.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 29 May 2013 22:32:40 -0700

git (1:1.8.3~rc3-1) experimental; urgency=low

  * new upstream release candidate.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 19 May 2013 11:49:16 -0700

git (1:1.8.3~rc2-1) experimental; urgency=low

  * new upstream release candidate.
    * gitk: "grep diff" pickaxe variant (closes: #589283).
  * debian/rules: install perl modules with correct permissions
    (thx Christian Schwartz for suggesting it through lintian).
  * move "git svn" perl helpers to the git-svn package.
    * debian/rules: install Git::SVN and Git::SVN::* to the
      git-svn package, not git.
    * debian/control: git-svn: Breaks: and Replaces: old git.
  * debian/rules: install perl module manpages to git-man and
    git-svn packages, as appropriate.
  * debian/rules: mark hooks in /usr/share/git-core/contrib/hooks/
    as executable (thx Olivier Berger; closes: #687391).
  * debian/control: drop Depends: and Build-Depends: libc6.1
    (>= 2.10.2-6) [ia64] workaround for #563882, since that bug did
    not affect any stable release.
  * debian/control: drop dependencies on pre-Debian 5.0 (lenny)
    packages.
    * do not accept libcurl3-gnutls-dev as a substitute for
      libcurl4-gnutls-dev.
    * do not accept libsvn-core-perl as a substitute for
      libsvn-perl.
    * make asciidoc, docbook-xsl, runit, and tk dependencies
      unversioned.
    * git, git-man, git-cvs, git-svn, git-email, gitk: drop Breaks
      and Replaces against cogito (<< 0.16rc2-0).
    * git: drop Breaks against old qgit and git-buildpackage.
    * git: drop Conflicts against git-core (<< 1:1.5.2~rc3-2.).
    * git-gui: no longer Replaces git-core (<< 1:1.5.2.2-3).
  * Use source format 3.0 (quilt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 15 May 2013 00:20:06 -0700

git (1:1.8.3~rc1-1) experimental; urgency=low

  * new upstream release candidate.
    * log --pretty: avoid undefined behavior in %>, %<, %><'s
      truncation support (closes: #706400).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 03 May 2013 23:28:04 -0700

git (1:1.8.3~rc0-1) experimental; urgency=low

  * new upstream release candidate.
    * remote-bzr: respect bzr "author" field in import (closes:
      #705245).
    * remote-bzr: allow re-add of a deleted file in the same commit
      (closes: #704913, #704959).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 29 Apr 2013 00:29:14 -0700

git (1:1.8.2.1-1) experimental; urgency=low

  * new upstream point release (see RelNotes/1.8.2.1.txt).
  * debian/implicit:
    * check for debian/changelog.upstream.
    * %.deb-DEBIAN-md5sums depends on /usr/share/doc/$pkg/doc/,
      doc-base/, and lintian/ directories.
    * do not remove files named after implicit targets.
  * debian/rules:
    * respect <num> in DEB_BUILD_OPTIONS=parallel=<num>.
    * do not create ./changelog symlink (avoiding a race).
    * override implicit git-core.deb-docs target, since git-core does
      not have its own doc/ directory.
  * debian/README.source: point to git.README.source (thx Helmut
    Grohne; closes: #704580)
  * debian/git.NEWS.Debian: add leading spaces before tab for
    changelog parsers (thx Russ Allbery for suggesting it through
    lintian).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 08 Apr 2013 00:46:02 -0700

git (1:1.8.2-1) experimental; urgency=low

  * new upstream release (see RelNotes/1.8.2.txt).
  * package the bzr remote helper (closes: #702697).
    * debian/control: new package git-bzr; Priority: extra; Provides:
      git-remote-bzr; Depends: python, python-bzrlib; Conflicts:
      bzr-git; Build-Depends: bzr, python, python-bzrlib for tests;
      package git now Suggests and git-all Recommends: git-bzr.
    * debian/git-remote-bzr.txt: new; explain usage.
    * debian/rules: build git-remote-bzr documentation, munge script
      shebang line, and install manpage (git-remote-bzr--git.1.gz)
      and script (/usr/lib/git-core/git-remote-bzr--git) in git-bzr
      package.
    * debian/git-doc.docs: install git-remote-bzr.html.
    * debian/git-bzr.postinst, debian/git-bzr.prerm: new; provide
      /usr/bin/git-remote-bzr through the alternatives system.
    * debian/git-bzr.README.Debian: new; explain how to get started.
  * debian/control: Standards-Version: 3.9.4.0.
  * debian/rules: define %.install depending on install-arch or
    install-indep as appropriate for each package.
  * debian/implicit: depend on %.install instead of both install-arch
    and install-indep so "debian/rules binary-arch" does not try to
    build documentation.
  * debian/rules build-indep, install-indep: build documentation even
    if asciidoc is not installed.  Build-Depends: dpkg-dev (>= 1.16.2).
  * debian/rules: handle DEB_BUILD_OPTIONS=parallel=<num>.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 31 Mar 2013 22:06:58 -0700

git (1:1.8.2~rc3-1) experimental; urgency=low

  * new upstream release candidate.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sat, 09 Mar 2013 00:50:39 -0800

git (1:1.8.2~rc2-1) experimental; urgency=low

  * new upstream release candidate.
    * skip readlink() of entries in GIT_CEILING_DIRECTORIES after an
      empty entry (thx Anders Kaseorg and Michael Haggerty).
  * update debian/copyright.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 03 Mar 2013 15:22:27 -0800

git (1:1.8.2~rc1-1) experimental; urgency=low

  * new upstream release candidate.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sat, 02 Mar 2013 13:27:28 -0800

git (1:1.8.2~rc0-1) experimental; urgency=low

  * new upstream release candidate.
    * push: require force for refs under refs/tags/.
    * push: require force for annotated tags.
  * debian/git.NEWS.Debian: advertise upcoming change to default
    behavior of argumentless "git push [<remote>]".
  * git-svn: no longer Depends: libwww-perl (thx RjY; closes:
    #699536).
  * update debian/copyright (closes: #699930).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 18 Feb 2013 16:52:57 -0800

git (1:1.8.1.3-1) experimental; urgency=low

  * new upstream point release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 07 Feb 2013 23:08:48 -0800

git (1:1.8.1.2-1) experimental; urgency=low

  * new upstream point release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 03 Feb 2013 23:01:24 -0800

git (1:1.8.1.1-1) experimental; urgency=low

  [ Jonathan Nieder ]
  * debian/git.NEWS.Debian: bash completion script moved to
    /usr/share/bash-completion/completions/ (thx Philipp Marek;
    closes: #698055).

  [ Gerrit Pape ]
  * new upstream release.

 -- Gerrit Pape <pape@smarden.org>  Wed, 16 Jan 2013 08:17:53 +0000

git (1:1.8.1-1) experimental; urgency=low

  * new upstream release (see RelNotes/1.8.1.txt).

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 31 Dec 2012 18:40:24 -0800

git (1:1.8.1~rc3-1) experimental; urgency=low

  * new upstream release candidate.
  * grep: enable perl regex (-P) support (thx Guido Günther; closes:
    #669376).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 25 Dec 2012 23:40:08 -0800

git (1:1.8.1~rc0-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/control: mark all binary packages Multi-Arch: foreign (thx
    Colin Watson; closes: #694651).

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 06 Dec 2012 15:10:21 -0800

git (1:1.8.0-1) experimental; urgency=low

  * new upstream release (see RelNotes/1.7.11.txt, RelNotes/1.7.12.txt,
    RelNotes/1.8.0.txt)
    * git-svn: ignore SIGPIPE so serf can recover from HTTP timeouts
      (closes: #526989).
    * git-svn: use platform specific auth providers.
    * git-svn: handle errors and concurrent commits in dcommit
      (closes: #676904).
    * am: support --include option.
    * grep: add a grep.patternType configuration setting.
    * daemon: --access-hook for authentication logging and policy.
    * merge-base: expose --is-ancestor helper for scripts.
    * branch: support --set-upstream-to with simpler syntax than
      --set-upstream.
    * format-patch: do not use bogus email addresses in message ids.
    * http: trim trailing newline from /etc/mailname.
    * do not ignore port in ssh URLs with ipv6 literals
      (closes: #646178).
    * look in ~/.config/git/config (XDG_CONFIG_HOME can override this)
      before ~/.gitconfig for configuration.
    * [core] excludesfile and attributes file default to
      ~/.config/git/ignore and ~/.config/git/attributes.
    * var doc: advertise current DEFAULT_PAGER and DEFAULT_EDITOR
      settings (closes: #666250).
    * git-blame.el: address elisp warnings from emacs:
      * use mapc instead of mapchar (closes: #611931).
      * do not use goto-line in lisp code (closes: #611933).
      * use with-current-buffer where appropriate (closes: #611932).
    * cli: add Italian and Vietnamese translations.
    * push: introduce new push.default mode "simple".  It will be the
      default in the next major release.

  [ Jonathan Nieder ]
  * debian/diff:
    * 0013...0031: remove; applied upstream.
    * 0012-Makefile-add-a-knob-to-turn-off-...diff: remove; fixed
      upstream.
  * debian/rules:
    * install German translation.
    * use NO_INSTALL_HARDLINKS=1 instead of NO_HARDLINKS=1 in OPTS
      (thx Tomáš Myšík and Anders Kaseorg; see #683568).
    * install-arch: sanity-check that built-ins still do not approach
      btrfs hardlink limit (see #642603).
    * git: install git-prompt.sh from contrib/completion to
      /usr/lib/git-core/git-sh-prompt.
    * git: install completion script to
      /usr/share/bash-completion/completions/{git,gitk} instead of
      /etc/bash_completion.d.  This allows bash-completion 2.0 to load
      it on the fly when completing arguments to git commands.
  * debian/control: Breaks: bash-completion (<< 1:1.90-1).
  * debian/git.preinst, debian/git.postinst, debian/git.postrm:
    remove /etc/bash_completion.d/git on upgrade if unmodified.
  * debian/rules, debian/git.conffiles, debian/git-prompt.completion:
    /etc/bash_completion.d/git-prompt: new; source
    /usr/lib/git-core/git-sh-prompt so .bashrc files that rely on the
    completion lib defining __git_ps1 can continue to work (thx Danny
    Yates and Anders Kaseorg).
  * debian/git.conffiles: remove /etc/bash_completion.d/git.
  * update debian/copyright.
  * debian/control: gitweb: Recommends: libhttp-date-perl or
    libtime-module-perl for If-Modified-Since support; Build-Depends:
    same to support test suite.
  * debian/implicit: use order-only dependencies so "debian/rules
    binary-arch" does not try to build documentation.

  [ Gerrit Pape ]
  * new upstream release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 31 Oct 2012 17:58:10 -0700

git (1:1.7.10.4-2) unstable; urgency=low

  * debian/diff:
    * 0013...0030: new from the upstream 'master' branch: git svn:
      adapt to svn 1.7 changes:
      * normalize paths and URLs passed to Subversion (thx Michael G.
        Schwern; closes: #678137)
      * use correct "svn cp" syntax when checking git svn's mangling
        of @-signs in branch names (svn became stricter).
      * commit filetype changes between a regular file and symlink as
        replacement (deletion followed by addition) instead of
        modification of files.  Otherwise, clients pulling the change
        with "svn update" hit an assertion failure (svn issue 4091).
    * 0031-git-svn-use-YAML-format-...diff: new from 1.7.11: git svn:
      use YAML format for mergeinfo cache when possible.
  * debian/control: git-svn: Depends: libyaml-perl for platform- and
    version-independent .git/svn/.caches format; Build-Depends:
    libyaml-perl for tests (thx Tim Retout for the analysis; closes:
    #587650).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 12 Oct 2012 13:27:36 -0700

git (1:1.7.10.4-1) unstable; urgency=low

  * new upstream point release (thx Jonathan Nieder).

 -- Gerrit Pape <pape@smarden.org>  Fri, 08 Jun 2012 00:04:11 +0000

git (1:1.7.10.2-1) unstable; urgency=low

  * new upstream point release.
    * merge-recursive: don't detect renames of empty files.
    * fast-import: tighten parsing of datarefs.
    * diff -c -U0: fix segfault showing start of file.
  * debian/rules: do not install preliminary German translation.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 11 May 2012 20:20:15 -0500

git (1:1.7.10-1) unstable; urgency=low

  * new upstream release.
    * merge: use editor by default in interactive sessions
    * submodules: use relative paths to git dir and worktree.
    * fast-import: reject "ls" of path with empty components.
    * cli: add Chinese, Dutch, Portuguese, and Swedish translations.
    * am: officially deprecate -b/--binary option.
  * debian/diff:
    * 0005-gitk-use-symbolic-font-names-sans-and-monospace-when-.diff,
      0006-gitk-Skip-over-AUTHOR-COMMIT_DATE-when-searching-all-.diff:
      remove; applied upstream.
    * 0007...0014: rename to 0005-*, ... 0012-*.
  * debian/git.README.Debian: make paths in inetd(8) hint
    consistent with git-daemon-run and git-daemon-sysvinit setup.
  * debian/control: package git: Suggests: gettext-base for translated
    output in shell scripts.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 06 Apr 2012 22:28:18 -0500

git (1:1.7.9.5-1) unstable; urgency=low

  * new upstream point release.
  * debian/control: git-daemon-sysvinit: Priority: extra (thx Jonathan
    Nieder; closes: #661317).

 -- Gerrit Pape <pape@smarden.org>  Wed, 28 Mar 2012 12:30:35 +0000

git (1:1.7.9.4-1) unstable; urgency=low

  * new upstream point release.
    * commit: skip intent-to-add entries instead of erroring out.
    * grep -I: let diff attribute override binary file detection.
    * clone, daemon, http-backend, transport: look for .../foo before
      .../foo.git in response to requests for .../foo.
    * rev-list: enable or disable --verify-objects behavior based on
      the command line instead of uninitialized memory.
    * checkout -b: allow switching out of an unborn branch (closes:
      #506480).
  * debian/diff: clean up patches for upstream.
    * 0001-hooks-post-receive-email-set-encoding-to-utf-8.diff:
      hooks/post-receive-email: set content-transfer-encoding as well.
    * 0002-post-receive-email-defend-against-non-utf8-...diff: new;
      hooks/post-receive-email: avoid mixed-encoding messages when
      i18n.logoutputencoding is not utf8 (thx Alexey Shumkin).
    * 0002-remove-shebang-...diff: rename to 0003-remove-...diff;
      remove #! line from sh-i18n and rebase--* shell libraries, too
      (lintian); fix tests' --valgrind support to detect shell
      libraries without the #! line (thx Jeff King).
    * 0003-pre-rebase-hook-capture-...diff: simplify (thx Junio C
      Hamano); rename to 0004-*.
    * 0004-gitk-use-symbolic-font-names-...diff: rename to 0005-*; use
      non-symbolic font names on platforms like Mac OS X, Windows, and
      tk <= 8.4 that lack fontconfig support.
    * 0005...0008, 0010: rename to 0006-*, ..., 0009-*, 0011-*;
      clarify descriptions.
    * 0009-tcp-unify-ipv4-and-ipv6-code-paths.diff, 0011-*: combine;
      rename to 0010-*.
    * 0012-transport-optionally-honor-DNS-SRV-records.diff, 0013-*:
      combine; rename to 0011-*.
    * 0014, 0015: rename to 0013-*, 0014-*.
  * debian/git-daemon.init: respect GIT_DAEMON_ENABLE in restart and
    reload actions (thx Jonathan McCrohan; closes: #663522).
  * debian/control: git-gui: point to aspell for spell checking support
    in the package description; Suggests: aspell (thx Jonathan Ballet,
    closes: #656061).
  * debian/control: add Vcs-Browser: http://repo.or.cz/w/git/debian.git
    (thx Jonathan McCrohan; closes: #663451).
  * debian/control: Standards-Version: 3.9.3.1.
  * debian/copyright: adopt copyright-format 1.0.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 14 Mar 2012 02:40:00 -0500

git (1:1.7.9.1-1) unstable; urgency=low

  * new upstream point release.
    * merge: do not launch an editor on "--no-edit $tag" (thx Guido
      Günther; closes: #659255).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 14 Feb 2012 15:32:48 -0600

git (1:1.7.9-1) unstable; urgency=low

  * merge branch debian-experimental.
  * new upstream release (closes: #657262).
  * debian/diff/0016-unix-socket-handle-long-socket-...diff: remove;
    applied upstream.
  * debian/changelog: add missing parenthesis to 1:1.7.9~rc1-1 entry.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 27 Jan 2012 21:23:27 -0600

git (1:1.7.9~rc1-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff:
    * 0014-Makefile-add-a-knob-to-...diff: rename to 0015-*.
    * 0014-srv-be-more-tolerant-of-broken-DNS-replies.diff: new; srv:
      convert some error conditions to warnings (closes: #649781).
    * 0016-unix-socket-handle-long-socket-pathnames.diff: new from
      upstream; credential-cache: handle long socket pathnames (closes:
      #655288).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 13 Jan 2012 16:10:44 -0600

git (1:1.7.9~rc0-1) experimental; urgency=low

  * new upstream release candidate.
  * update debian/copyright.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 06 Jan 2012 17:06:55 -0600

git (1:1.7.8.3-1) unstable; urgency=medium

  * new upstream point release.
  * debian/git.preinst: on upgrade from git <= 1:1.7.7-1, replace
    /usr/lib/git-core/git with a copy of itself.  This prevents "are the
    same file" errors when replacing hard links to the old copy with
    symlinks using "mv" (thx Jon Dowland and Anders Kaseorg; closes:
    #654596).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 06 Jan 2012 16:45:46 -0600

git (1:1.7.8.2-1) unstable; urgency=low

  * merge branch debian-experimental.
  * new upstream release.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 29 Dec 2011 01:30:43 -0600

git (1:1.7.8~rc3-1) experimental; urgency=low

  * new upstream release candidate.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 18 Nov 2011 04:09:51 -0600

git (1:1.7.8~rc2-1) experimental; urgency=low

  [ Jonathan Nieder ]
  * new upstream release candidate.
  * merge branch debian-sid.
  * update debian/copyright.
  * debian/git.preinst: replace hard links to /usr/lib/git-core/git with
    symlinks before upgrading from git <= 1:1.7.7-1 (thx Antti Kultanen;
    closes: #645009).

  [ Gerrit Pape ]
  * merge branch debian-sid.

 -- Gerrit Pape <pape@smarden.org>  Wed, 16 Nov 2011 09:55:47 +0000

git (1:1.7.7.3-1) unstable; urgency=low

  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Mon, 14 Nov 2011 10:22:34 +0000

git (1:1.7.7.2-1) unstable; urgency=low

  * new upstream point release.
  * debian/rules: add separate build-arch and build-indep targets
    (thx Roger Leigh for suggesting it through lintian).
  * debian/rules: drop CFLAGS=-O0 workaround for ancient hppa code
    generation bug (see #426302).
  * debian/rules: use dpkg-buildflags to retrieve compiler flags
    (including hardening options).  Build-Depends: dpkg-dev (>= 1.15.7).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 01 Nov 2011 23:41:55 -0500

git (1:1.7.8~rc0-1) experimental; urgency=low

  * merge branch debian-sid.
  * new upstream release candidate.
    * debian/diff/0001-...diff, 0002-...diff, 0003-...diff: remove;
      applied upstream (thx Jonathan Nieder).

 -- Gerrit Pape <pape@smarden.org>  Mon, 31 Oct 2011 09:45:53 +0000

git (1:1.7.7.1-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/0003-Makefile-do-not-set-setgid-bit-on-dir...diff:
    remove; applied upstream.

 -- Gerrit Pape <pape@smarden.org>  Mon, 24 Oct 2011 20:27:20 +0000

git (1:1.7.7-2) unstable; urgency=low

  [ Jonathan Nieder ]
  * debian/git.postinst: check if /usr/share/doc/git/contrib/hooks is a
    symlink before changing it to one (thx Євгеній Мещеряков; closes:
    #645005).
  * debian/diff:
    * 0001-ident-check-etc-mailname-if-author-email-is-unknown.diff,
      0007-Makefile-do-not-use-setgid-bit-on-...diff: remove; obsolete.
    * 0002...0006, 0008...0015: rename to 0005-*, ..., 0017-*.
    * 0001...0004: new from the upstream 'master' branch:
      * ident: check /etc/mailname if email is unknown
      * ident: do not retrieve default ident when unnecessary
      * init --shared: do not set setgid bit on directories on
        GNU/kFreeBSD
      * Makefile: fix permissions of mergetools/ when building from
        source extracted with permissive umask
    * 0018-Makefile-add-a-knob-to-turn-off-hardlinks-...diff: new;
      Makefile: add a knob to disable hardlinks within bindir and
      gitexecdir.
  * debian/rules: add NO_HARDLINKS=1 to OPTS (thx Bastian Blank;
    closes: #642603).
  * debian/rules: do not rely on umask to set contrib permissions.
  * update debian/copyright.
  * debian/watch, debian/copyright: point to code.google.com for now.
    The upstream tarballs haven't been added back to kernel.org yet.
  * debian/changelog.upstream, debian/versions.upstream: include
    v1.7.6.4.

  [ Simon Chopin ]
  * debian/git.postinst: fix fresh install contrib/hooks cleaning
    (#645005).

 -- Gerrit Pape <pape@smarden.org>  Thu, 13 Oct 2011 00:04:49 +0000

git (1:1.7.7-1) unstable; urgency=low

  * new upstream release.
  * merge branch debian-experimental.
  * debian/rules, debian/git.postinst: move contrib hooks from
    /usr/share/doc/git-core/ into /usr/share/git-core/; provide symlink
    for backward compatibility (closes: #640949).

 -- Gerrit Pape <pape@smarden.org>  Sun, 09 Oct 2011 21:00:07 +0000

git (1:1.7.7~rc1-1) experimental; urgency=low

  * merge branch debian-sid.
  * new upstream release candidate.
  * debian/rules: git: skip directories in /usr/lib/git-core/ and
    /usr/bin/ when stripping programs.

 -- Gerrit Pape <pape@smarden.org>  Wed, 14 Sep 2011 14:23:10 +0000

git (1:1.7.6.3-1) unstable; urgency=low

  * merge branch debian-experimental.
  * new upstream point release.
  * debian/diff:
    * 0007-...diff, ..., 0014-...diff: slightly rework as 0008...0015-*
      to provide better error reporting (thx Jonathan Nieder).
    * 0015-Makefile-do-not-use-setgid-bit-on-...diff: rename to 0007-*.

 -- Gerrit Pape <pape@smarden.org>  Wed, 14 Sep 2011 11:33:23 +0000

git (1:1.7.6-1) experimental; urgency=low

  * new upstream release.
  * debian/diff:
    * 0012-daemon-check-for-errors...diff: clarify patch description.
    * 0013-transport-learn-to-honor-DNS-SRV...diff: rename to 0014-*.
    * 0013-tcp-make-dns_resolve-return-an-error-code.diff: new; make
      dns_resolve() pass on return value from getaddrinfo.
    * 0014-transport-honor-DNS-SRV-records.diff: fix two regressions
      introduced by this patch when it was added in 1:1.7.6~rc1-1.
      * use descriptive messages like "Unable to look up
        git.example.com: Out of memory" to report errors from the
        resolver, instead of "unable to connect to a socket (success)".
      * tolerate alias (CNAME) records in the DNS reply for
        _git._tcp.<host>, instead of confusing them for invalid SRV
        records and erroring out.
    * 0015-Makefile-do-not-use-setgid...diff: new; Makefile: set
      DIR_HAS_BSD_GROUP_SEMANTICS on GNU/kFreeBSD.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 28 Jun 2011 12:54:58 -0500

git (1:1.7.6~rc2-1) experimental; urgency=low

  * new upstream release candidate.

  [ Daniel Baumann ]
  * add an init.d script for git-daemon (closes: #422139).
    * debian/control, debian/rules: new package git-daemon-sysvinit;
      Depends: adduser; Conflicts: git-daemon-run; package git now
      Suggests and git-all Recommends: git-daemon-run |
      git-daemon-sysvinit.
    * debian/git-daemon.init: new; script to start or stop git-daemon.
    * debian/git-daemon.default: new; provide some default settings and
      disable the daemon by default on first installation.
    * debian/git-daemon-sysvinit.README.Debian: new; explain how to get
      started.
    * debian/git-daemon-sysvinit.conffiles: new; treat
      /etc/default/git-daemon, /etc/init.d/git-daemon as conffiles.
    * debian/git-daemon-sysvinit.postinst: new; add gitdaemon system
      user; register and invoke init script to start git-daemon.
    * debian/git-daemon-sysvinit.prerm: new; stops git-daemon.
    * debian/git-daemon-sysvinit.postrm: new; unregisters init script.

  [ Jonathan Nieder ]
  * debian/diff/:
    * 0009-daemon-move-...diff, 0011-tcp-...diff: move fallback
      definition of HOST_NAME_MAX to new use sites (fixes FTBFS on
      kfreebsd).
    * 0012-transport-learn-to-honor...diff: rename to 0013-*.
    * 0012-daemon-check-for-errors-retrieving-canonical-IP-addre.diff:
      new; daemon: check for errors when retrieving IP address for use
      by the --interpolated-path feature.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 17 Jun 2011 15:56:12 -0500

git (1:1.7.6~rc1-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff/0007-...diff, ..., 0012-transport-learn...diff: new;
    teach the git client to pay attention to SRV records (thx Julien
    Cristau; closes: #627839).
  * debian/rules: add USE_SRV_RR=1 to OPTS.
  * debian/rules: add htmldir=/usr/share/doc/git/html to OPTS and
    DOC_OPTS.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 09 Jun 2011 19:05:55 -0500

git (1:1.7.5.4-1) unstable; urgency=low

  * new upstream point release.

  [ Gerrit Pape ]
  * debian/changelog.upstream, debian/versions.upstream: update upstream
    changelog.

  [ Jonathan Nieder ]
  * debian/changelog.upstream.sh: use set -e.
  * debian/git-daemon/run: use SO_REUSEADDR when binding the listening
    socket so the server can restart without waiting for old connections
    to time out (thx Daniel Kahn Gillmor; closes: #609405).
  * debian/git-daemon-run.postrm purge: terminate the git-daemon/log
    service, even if there is an active connection using it, before
    deleting logs and the gitlog user (thx Daniel Kahn Gillmor; closes:
    #627314).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 07 Jun 2011 13:23:58 -0500

git (1:1.7.5.3-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/0007-...diff, 0008-...diff, 0009-...diff, 0010-...diff:
    remove; included upstream.
  * debian/control: Package: git-cvs: make cvs dependency unversioned;
    Package: git-gui: make tk dependency unversioned (thx Jonathan
    Nieder).

 -- Gerrit Pape <pape@smarden.org>  Fri, 27 May 2011 13:00:05 +0000

git (1:1.7.5.1-1) unstable; urgency=low

  * new upstream point release.
  * merge branch debian-experimental.
  * debian/diff/:
    - 0009-upload-pack-start-pack-objects-before-async-rev-...diff:
      remove; applied upstream.
    - 0007, 0008 (the add -p split-and-edit fix): rename to 0009-*,
      0010-*.
    - 0007-add-p-q-should-really-quit.diff, 0008-t3701-...diff: new
      from upstream; tests: check that the add -p split-and-edit bug
      has not resurfaced.
  * debian/control: package git: no longer Conflicts: but Breaks:
    git-core from Debian 5.0 (lenny) to simplify the upgrade path
    (thx Russ Allbery for suggesting it through lintian).
  * debian/control: package git: Conflicts: git-core from
    Debian 4.0 (etch) which provided /usr/bin/git through the
    alternatives system.
  * debian/control: Standards-Version: 3.9.2.0.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 05 May 2011 03:41:36 -0500

git (1:1.7.5-1) experimental; urgency=low

  * new upstream release.
  * 0009-upload-pack-start-pack-objects-before-async-rev-list.diff:
    new from upstream; upload-pack: start pack-objects which reads
    pack_pipe before writing to it to avoid deadlock (closes:
    #607346).
  * debian/changelog.upstream, debian/versions.upstream: do not skip
    versions not packaged for Debian (thx Gerrit Pape).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 26 Apr 2011 21:49:48 -0500

git (1:1.7.5~rc3-1) experimental; urgency=low

  * new upstream release candidate.
  * merge branch debian-sid.
  * 0007-gitk-Take-only-numeric-version-components-when-comput.diff:
    remove; applied upstream.

 -- Gerrit Pape <pape@smarden.org>  Wed, 20 Apr 2011 07:46:58 +0000

git (1:1.7.4.4-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/0008...0064: remove; applied upstream.
  * debian/diff/0008-add...diff, 0009-add-p-work...diff: new from
    upstream; add -p: do not error out for attempts to stage hunks
    after splitting and editing them.  This fixes a regression
    introduced by v1.7.4.3~10^2 (apply: do not patch lines that were
    already patched, 2011-03-04).
  * debian/git-doc.doc-base.git-index-format: new; catalog
    .git/index file format document.
  * debian/git.preinst, debian/git.postinst, debian/git.postrm:
    don't use dpkg-maintscript-helper, avoiding a dependency on
    recent dpkg (thx Anders Kaseorg and Marc Haber; closes: #618708).
  * debian/git-daemon-run.postrm: terminate the git-daemon/log
    service before deleting the gitlog user (closes: #610099).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 15 Apr 2011 00:00:03 -0500

git (1:1.7.4.1-5) unstable; urgency=low

  * merge branch debian-experimental.
  * debian/diff/0008...0064: new from the upstream 'maint' branch:
    (see RelNotes/1.7.4.2.txt for details)
    * revert "core.abbrevguard: Ensure short object names stay
      unique a bit longer"
    * parse_tag_buffer(): do not prefixcmp() out of range
    * pull: do not display fetch usage on --help-all
    * gitweb: address warnings from perl 5.13
    * gitweb: replace tabs with spaces when highlighting syntax
    * merge: honor prepare-commit-msg hook
    * diff: handle diffstat of rewritten binary files
    * config: add "[push] default = upstream" synonym for
      "[push] default = tracking"
    * diffcore: properly honor the difference between -M and -C
    * diffcore: improve similarity heuristics for rename detection
    * patch-id: do not trip over "no newline" marker
    * various documentation, usage string, and code clarity
      improvements

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 16 Mar 2011 21:01:53 -0500

git (1:1.7.4.1-4) experimental; urgency=low

  * git-el.postinst: check if /usr/share/doc/git/contrib/emacs is a
    symlink before changing it to one (closes: #617631).
  * git-el.postinst: remove spurious .../contrib/emacs.old and
    /usr/share/git-core/emacs/emacs symlinks.
  * package git: do not run emacs-package-remove on upgrade (it's not
    needed).
    - git.postinst: do not run "emacs-package-remove git".
    - debian/control: git no longer Depends: emacsen-common (closes:
      #617784).
  * git-el.emacsen-install, git-el.emacsen-remove:
    - use printf instead of echo.
    - only remove the lisp (.el) and bytecode (.elc) files that we
      install.
    - make output less noisy --- for example, do not say "+ set +x".

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 13 Mar 2011 05:03:44 -0500

git (1:1.7.4.1-3) unstable; urgency=low

  [ Anders Kaseorg ]
  * Loosen versioned replaces/conflicts on git-core, to fix upgrades from
    lucid.

  [ Jonathan Nieder ]
  * README.emacs: git-blame.el does not print a summary in the echo
    area (documents: #611935).
  * Move emacs support files to a separate git-el package.
  * Make git depend on emacsen-support, so it can reliably clean up
    the old emacs support files on upgrade (closes: #614578)
  * git-el.emacsen-install: Overwrite .el symlinks if they already
    exist (closes: #614659).
  * git-el.emacsen-remove: Do not complain if the site-lisp
    directory is nonempty or is already missing.
  * debian/control: git-man: Section: doc.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 04 Mar 2011 18:26:27 -0600

git (1:1.7.4.1-1) unstable; urgency=low

  * new upstream release (closes: #600566, #575917, #578752, #583693,
    #583699, #588103, #507476, #540001, #524309, #581691, #600785,
    #577471, #607044, #606975, #610423, #610481).

  [ Anders Kaseorg ]
  * debian/git.docs, debian/rules: deal with RelNotes subdirectory.
  * debian/diff/0007-gitk-Take-only-numeric-...diff: new; gitk: do
    not error out when git version number contains "-rc".

  [ Jonathan Nieder ]
  * add myself as uploader.
  * debian/diff/0003, 0007, 0010-0034: remove, applied upstream.
  * debian/rules: accept patches with .patch suffix, too (thx Anders
    Kaseorg).
  * debian/rules: use patch -N -r- so patch application is idempotent.
  * update debian/copyright.
  * debian/diff/0001-ident-check-etc-mailname...diff: avoid calls to
    gethostbyname when mailname is not an fqdn (closes: #611608).
  * debian/diff/0005-gitk-use-...diff: new; gitk: use standard desktop
    fonts by default.  The appearance for users that already have a
    generated ~/.gitk file is not affected (closes: #466471).
  * debian/diff/0006-gitk-...diff: new; gitk: avoid spurious matches
    in "All fields" search (thx Frédéric Brière, closes: #465776).
  * debian/control: git-cvs: recommend cvs2git for one-time conversions
    (closes: #585725).
  * debian/control: git-core: explain that it still may be needed (thx
    Denis Laxalde).
  * debian/control: gitweb: allow lynx-cur to satisfy dependency on a
    CGI implementation (thx Ivan Shmakov).
  * debian/control, debian/rules: new architecture-independent package
    git-man: manual pages that were previously in the main git package.
  * debian/rules: do not build documentation on autobuilders (closes:
    #499002).
  * debian/control: Build-Depends-Indep: asciidoc, xmlto, docbook-xsl.
  * debian/rules: git-gui: install git-gui--askpass helper to
    /usr/lib/git-core (closes: #598245).
  * debian/rules: git-doc: install symlink to html documentation in
    /usr/share/doc/git (thx Ian Jackson).
  * debian/watch: new; point to upstream sources.
  * debian/implicit: create DEBIAN/md5sums with correct permissions.
  * debian/diff/0003-remove-shebang...diff: new; do not start shell
    libraries with #!/bin/sh.
  * debian/rules: do not try to strip scripts even if they begin
    with "# " in place of "#!".
  * debian/diff/0004-pre-rebase-hook-capture...diff: new;
    hooks/pre-rebase: use a <<HERE document to prevent syntax checkers
    from treating documentation as code.
  * debian/implicit: check for debian/$pkg.doc-base.$docid.
  * debian/git-doc.doc-base.*: new; catalog provided documentation.
  * debian/implicit: check for debian/$pkg.lintian-overrides.
  * debian/git.lintian-overrides: new; document some deviations from
    lintian guidelines.
  * debian/control: Standards-Version: 3.9.1.0.

  * debian/git.README.Debian: server logs go in /var/log/apache2.
  * debian/diff/0002-Revert-Merge-branch-jn-gitweb...diff: remove.
  * debian/diff/0006, 0008, 0009-instaweb...diff: remove, no longer
    needed.
  * debian/rules, debian/control: move gitweb script to the main git
    package for use by instaweb; make gitweb into a configuration
    package.
  * debian/gitweb.NEWS.Debian, debian/git.README.Debian,
    debian/gitweb.conf: static files moved to /usr/share/gitweb/static.
  * debian/gitweb.conf: disable rename patches (@diff_opts = ()).
  * debian/diff/0001-Revert-gitweb-...diff: remove; no longer needed.
  * debian/rules: gitweb: move gitweb.cgi script to /usr/share;
    add a symlink at /usr/lib/cgi-bin/gitweb.cgi for compatibility.

  * debian/git.emacsen-install, debian/rules, debian/git.postinst,
    debian/git.prerm: put emacs support files in /usr/share/git-core
    instead of /usr/share/doc/git/contrib.
  * debian/implicit: check for arbitrary debian/$pkg.README.*, not just
    README.source and README.Debian.
  * debian/git.README.emacs: new; introduction to the emacs support
    (text taken from contrib/emacs/README).

  [ Kevin Ryde ]
  * debian/rules, debian/git.emacsen-*, debian/git.postinst,
    debian/git.prerm: Make M-x git-status and git-blame modes available
    with emacs23 (closes: #576887).

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 15 Feb 2011 19:27:38 -0600

git (1:1.7.2.3-2.2) unstable; urgency=medium

  * Non-maintainer upload.
  * debian/diff/0034-gitweb-Introduce-esc_attr...diff: new from
    upstream: gitweb: do not parrot filenames or other arguments given
    in a request without proper quoting (closes: #607248,
    CVE-2010-3906).

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 16 Dec 2010 01:00:30 -0600

git (1:1.7.2.3-2.1) unstable; urgency=low

  * Non-maintainer upload.
  * debian/diff/0010...0033: new from the upstream 'maint' branch:
    * cache_tree_free: Fix small memory leak.
    * diff.c: call regfree to free memory allocated by regcomp.
    * gitweb: allow configurations that change with each request
      (fixes a regression from v1.7.2-rc2 in some gitolite setups).
    * Documentation: 19 formatting fixes (thx Frédéric Brière,
      closes: #540001, #600422).
    * setup: make sure git dir path is in a permanent buffer.
    * do not depend on signed integer overflow.
  * debian/control: gitweb: weaken dependencies to allow configurations
    using mod_perl or fastcgi rather than CGI; explain dependencies in
    the package description (thx Servilio Afre Puentes,
    closes: #600413).

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 18 Nov 2010 19:04:09 -0600

git (1:1.7.2.3-2) unstable; urgency=low

  * merge branch debian-experimental.
  * debian/gitweb.NEWS.Debian: typo (thx Jonathan Nieder).

 -- Gerrit Pape <pape@smarden.org>  Sun, 17 Oct 2010 20:07:22 +0000

git (1:1.7.2.3-1) experimental; urgency=low

  * new upstream release.
    * post-receive-email: document command-line mode (closes: #428413).
    * add-interactive: Clarify “remaining hunks in the file”
      (closes: #526014).
    * rebase -i -p: document shortcomings (closes: #532775).
    * GIT-VERSION-GEN: restrict tags used (closes: #473604).
    * git svn: avoid unnecessary '/' in paths for SVN (thx Jon Dowland,
      closes: #546733, #572847).
    * git svn: avoid uninitialized var in 'reset' (thx Jens Seidel,
      closes: #578908).
  * debian/diff/0003-git-submodule.sh-properly-initialize-shell-...diff,
    debian/diff/0004-Check-size-of-path-buffer-before-...diff: remove;
    applied upstream.
  * debian/diff/0001-Revert-gitweb-Use-diff_opts-while...diff: new;
    prevent gitweb from serving rename patches that GNU patch 2.6.1
    cannot apply.
  * debian/diff/0002-Revert-Merge-branch-jn-gitweb-plackup.diff: new;
    install gitweb.css et al in /usr/share/gitweb, not a new static/
    subdirectory.
  * debian/diff/0003-Do-not-unquote-into-in-URLs.diff: new from
    upstream; do not unquote + into space character in URLs.
  * debian/diff/0001-bug-448655-check-etc-mailname-...diff: rename to
    debian/diff/0004-bug-448655-check-etc-mailname-if-author...diff.
  * debian/diff/0002-bug-506445-hooks-post-receive-...diff: rename to
    debian/diff/0005-bug-506445-hooks-post-receive-...diff; adapt.
  * debian/diff/0006-instaweb-ignore-GITWEB_CONFIG_SYSTEM.diff: new;
    instaweb: ignore /etc/gitweb.conf;
    debian/diff/0007-gitweb-skip-logo-in-atom-feed-when...diff, ...,
    debian/diff/0009-instaweb-disable-logo-and-favicon...diff: new;
    instaweb: avoid 404 errors due to nonexistent image files (thx Uwe
    Kleine-König, closes: #592733).
  * update debian/copyright.
  * debian/rules, debian/git.README.Debian, debian/gitweb.conf:
    install gitweb.js, add an Alias for it to the VirtualHost example,
    and configure gitweb to look for it in the right place (closes:
    #555047).
  * debian/gitweb.NEWS.Debian: mention the new gitweb.js file.
  * debian/control: gitweb: Depends: apache2 | httpd-cgi (closes:
    #559890).
  * debian/gitweb.conf: use relative links for gitweb.css et al
    (thx Alban Browaeys, closes: #568343).
  * debian/control: package git: no longer Conflicts: git
    (<< 4.3.20-11).
  * debian/control: package git: Breaks: packages from Debian 5.0
    (lenny) relying on removed features such as dashed-form commands in
    $PATH (thx Adrian Bunk, closes: #561701); no longer Conflicts: but
    Breaks: ancient qgit for the same reason.
  * debian/gitweb.README.Debian: copy-edit.
  * debian/git.README.Debian: retitle to "Git for Debian" (thx
    Christoph Anton Mitterer, closes: #590129).
  * debian/control: Homepage: http://git-scm.com/ (closes: #553220).
  * debian/control: package git no longer Depends: libdigest-sha1-perl
    (thx Ansgar Burchardt, closes: #591039).
  * debian/control: Build-Depends: libio-pty-perl for better test
    coverage.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 03 Sep 2010 22:34:30 -0500

git (1:1.7.1-1.1) unstable; urgency=high

  * Non-maintainer upload.
  * debian/diff/0004-Check-size-of-path-buffer-before-writing-...diff:
    new, cherry-picked from 3c9d041: setup: Check size of path buffer
    before writing into it (closes: #590026, CVE-2010-2542).

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 25 Jul 2010 18:01:15 -0500

git (1:1.7.1-1) unstable; urgency=low

  * debian/diff/0003-t-t7400-submodule-basic.sh-debug-output-...diff:
    remove; obsolete.
  * debian/diff/0003-git-submodule.sh-properly-initialize-shell-...diff:
    new; git-submodule.sh: properly initialize shell variables (closes:
    #569594).
  * debian/rules: no longer set ARCH='$(ARCH)' in environment for make
    test.
  * new upstream release.
  * merge branch debian-experimental.

 -- Gerrit Pape <pape@smarden.org>  Sun, 25 Apr 2010 23:35:50 +0000

git (1:1.7.0.5-2~dbg0) unstable; urgency=low

  * debian/diff/0003-t7400-submodule-basic.sh-alpha-s390-skip-...diff:
    remove; more archs are affected (additionally hppa, armel).
  * debian/diff/0003-t-t7400-submodule-basic.sh-debug-output-...diff:
    new; t/t7400-submodule-basic.sh: debug output for t7400.24 'update
    --init'.

 -- Gerrit Pape <pape@smarden.org>  Fri, 23 Apr 2010 12:15:18 +0000

git (1:1.7.0.5-1) unstable; urgency=low

  * debian/git-core.postinst: new; replace /usr/share/doc/git-core with
    symlink /usr/share/doc/git-core -> git on upgrade from <= 1.7.0.4-2
    (closes: #578298).
  * debian/diff/0003-t7400-submodule-basic.sh-alpha-s390-skip-...diff:
    new; t7400-submodule-basic.sh: alpha, s390: skip 'update --init'
    test (workaround: #569594).
  * debian/control: no longer Replaces, Conflicts: git-completion (thx
    Jonathan Nieder, closes: #577730).
  * new upstream point release.
  * debian/rules: set ARCH='$(ARCH)' in environment for make test.

 -- Gerrit Pape <pape@smarden.org>  Tue, 20 Apr 2010 23:41:04 +0000

git (1:1.7.1~rc1-1.1) experimental; urgency=low

  * debian/control: typo (thx Jonathan Nieder).
  * debian/git-daemon-run.postinst: remove fixup for #522348.

 -- Gerrit Pape <pape@smarden.org>  Sun, 11 Apr 2010 23:22:46 +0000

git (1:1.7.1~rc1-1) experimental; urgency=low

  * new upstream release candidate.
  * merge branch debian-sid.

 -- Gerrit Pape <pape@smarden.org>  Sun, 11 Apr 2010 15:28:28 +0000

git (1:1.7.0.4-2) unstable; urgency=low

  * debian/rules: package git: no longer install /usr/share/doc/git-core
    -> git symlink; git-core: no longer install /usr/lib/git-core -> git
    symlink (closes: #576906).
  * debian/control: package git: Replaces:, Conflicts: git-core (<=
    1:1.7.0.4-1).
  * debian/rules: make /usr/share/gitweb/index.cgi ->
    ../../lib/cgi-bin/gitweb.cgi symlink relative (lintian).
  * debian/control: package git-core: minor update to the long
    description.
  * debian/git.README.source: add note about the <debian-package-git>
    mailing list.
  * debian/rules: target binary-indep: add missing dependency to
    git-core.deb-DEBIAN.
  * debian/implicit: no longer create DEBIAN/md5sums.
  * debian/rules: revert the /usr/lib/git-core -> /usr/lib/git rename
    (keeping upstream's default).

 -- Gerrit Pape <pape@smarden.org>  Sat, 10 Apr 2010 23:16:54 +0000

git (1:1.7.0.4-2~exp0) experimental; urgency=low

  [ Gerrit Pape ]
  * debian/control, debian/rules, debian/git-core.*: change source and
    binary package name from git-core to git; keep now obsolete empty
    git-core package that depends on git for upgrade (see
    http://lists.debian.org/debian-devel/2009/09/thrd2.html#00661).
  * debian/control: package git: Replaces: git-core, Conflicts: git-core
    (<= 1:1.7.0.3-1), Provides: git-core.
  * debian/git.NEWS.Debian: talk about the package name change, and the
    possible hazzle when upgrading with GNU Interactive Tools installed
    since etch and no git-core installed.
  * debian/control, debian/rules: new package git-all: dummy package
    which brings in all subpackages (following upstream's RPMs).

  [ Jonathan Nieder ]
  * debian/git.README.source: adjust for the package name change.
  * debian/rules: install symbolic link git -> git-core in /usr/lib
    to simplify upgrades.
  * debian/git-daemon/run: use $(git --exec-path) instead of hard-coding
    the path to the git-daemon binary.

 -- Gerrit Pape <pape@smarden.org>  Sat, 03 Apr 2010 15:07:19 -0500

git-core (1:1.7.0.4-1) unstable; urgency=low

  * debian/git-daemon-run.postrm: purge: don't warn if the git-daemon
    service is already removed; use -f option to userdel, on fast-purge
    the log service daemon might still run for a short time (closes:
    #575434).
  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Thu, 01 Apr 2010 20:42:19 +0000

git-core (1:1.7.0.3-1) unstable; urgency=low

  * debian/control: Standards-Version: 3.8.4.0.
  * debian/changelog: note fixes from Jonathan Nieder in 1.7.0.2-1.
  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Mon, 22 Mar 2010 09:19:06 +0000

git-core (1:1.7.0.2-1) unstable; urgency=low

  * new upstream point release.

    [ Jonathan Nieder ]
    * am: remove rebase-apply directory before gc (thx Mark Brown,
      closes: #570966).
    * git-imap-send: Convert LF to CRLF before storing patch to draft box
      (closes: #572598).
    * sha1_file: be paranoid when creating loose objects (closes:
      #569505).

 -- Gerrit Pape <pape@smarden.org>  Thu, 18 Mar 2010 20:44:12 +0000

git-core (1:1.7.0-1) unstable; urgency=low

  * debian/git-core.README.source: typos.
  * new upstream release.
    * Documentation: Update git core tutorial clarifying reference to
      scripts (closes: ##560795).
  * merge branch debian-experimental.

 -- Gerrit Pape <pape@smarden.org>  Tue, 16 Feb 2010 08:51:32 +0000

git-core (1:1.7.0~rc2-1) experimental; urgency=low

  * new upstream release candidate.

 -- Gerrit Pape <pape@smarden.org>  Fri, 12 Feb 2010 14:30:12 +0000

git-core (1:1.7.0~rc1-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff/0003-git-cvsserver-allow-regex-metacharacters...diff:
    remove; applied upstream.
  * debian/rules: NO_PYTHON=1.  Packaging the git_remote_helpers
    Python module will require more work.
  * update debian/copyright (closes: #557065).
  * debian/rules: set prefix=/usr when building man pages (closes:
    #567404).

 -- Jonathan Nieder <jrnieder@gmail.com>  Sat, 30 Jan 2010 17:46:04 -0600

git-core (1:1.6.6.2-1) unstable; urgency=medium

  * new upstream point release.
  * debian/diff/0003-git-cvsserver-allow-regex-metacharacters...diff:
    remove; applied upstream.
  * debian/rules: stop ignoring test suite failures on ia64, since
    #563882 has been fixed.  Build-Depends: and Depends:
    libc6.1 (>= 2.10.2-6) [ia64] for the fix (closes: #568915).
  * update debian/copyright (closes: #557065).
  * debian/rules: set prefix=/usr when building man pages (closes:
    #567404).

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 11 Feb 2010 21:48:55 -0600

git-core (1:1.6.6.1-1) unstable; urgency=low

  [ Gerrit Pape ]
  * new upstream point release.
    * Document git-blame triple -C option (thx Ramkumar Ramachandra,
      closes: #476604).
  * debian/diff/0003-git-cvsserver-allow-regex-metacharacters...diff:
    new; git-cvsserver: allow regex metacharacters in CVSROOT (fixes
    build/selftest failure if the build directory pathname contains a +).
  * debian/gitweb.apache2.conf, debian/gitweb.postinst: new; make gitweb
    work out of the box with Apache (thx Charles Plessy).
  * debian/gitweb.README.Debian, debian/gitweb.conf, debian/rules: make
    gitweb work out of the box with Apache (thx Charles Plessy, closes:
    #497809).
  * debian/gitweb.conffiles: add /etc/apache2/conf.d/gitweb.

  [ Jonathan Nieder ]
  * debian/rules: ignore test suite failures on ia64 (workaround:
    #563882).

 -- Gerrit Pape <pape@smarden.org>  Wed, 27 Jan 2010 13:30:29 +0000

git-core (1:1.6.6-1) unstable; urgency=low

  * new upstream release.

 -- Gerrit Pape <pape@smarden.org>  Mon, 04 Jan 2010 16:01:36 +0000

git-core (1:1.6.6~rc2-1) experimental; urgency=low

  * new upstream release candidate.
  * merge branch debian-sid.

 -- Gerrit Pape <pape@smarden.org>  Thu, 17 Dec 2009 10:13:09 +0000

git-core (1:1.6.5.7-1) unstable; urgency=low

  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Thu, 17 Dec 2009 09:39:55 +0000

git-core (1:1.6.6~rc1-1) experimental; urgency=low

  * merge branch debian-sid.
  * new upstream release candidate.

 -- Gerrit Pape <pape@smarden.org>  Fri, 04 Dec 2009 00:17:27 +0000

git-core (1:1.6.5.4-1) unstable; urgency=low

  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Thu, 03 Dec 2009 22:48:57 +0000

git-core (1:1.6.6~rc0-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff/0001-bug-369742-pager.c-fallback-to-pager-...diff,
    debian/diff/0002-bug-438793-494505-fallback-to-editor-...diff,
    debian/diff/0004-bug-477337-git-svn.perl-fallback-to...diff:
    remove; obsolete.
  * debian/rules: add DEFAULT_PAGER=pager, DEFAULT_EDITOR=editor to
    OPTS.

 -- Gerrit Pape <pape@smarden.org>  Thu, 26 Nov 2009 00:17:59 +0000

git-core (1:1.6.5.3-1) unstable; urgency=low

  [ Tanguy Ortolo ]
  * debian/git-core.README.Debian, debian/control: git-daemon-run:
    document that git-daemon is not provided by this package; add hint
    on how to enable git-daemon through inetd(8) (closes: #554215).

  [ Jonathan Nieder ]
  * debian/rules: drop misleading PPC_SHA1, ARM_SHA1 settings (closes:
    #555039).
  * debian/rules: log $(CC) version, not gcc (closes: #555040).
  * debian/rules: allow clean as non-root (closes: #555041).
  * debian/rules: drop obsolete WITH_P4IMPORT setting (closes:
    #555051).
  * debian/rules: TCLTK_PATH=wish (closes: #555027).

  [ Gerrit Pape ]
  * new upstream point release.
    * ls-files: unbreak "ls-files -i" (closes: #553296).
    * Require a struct remote in transport_get(); Allow curl helper to
      work without a local repository (closes: #553507).
    * help -a: do not unnecessarily look for a repository (closes:
      #539273).
    * thx Jonathan Nieder.

 -- Gerrit Pape <pape@smarden.org>  Tue, 17 Nov 2009 21:01:46 +0000

git-core (1:1.6.5.2-1) unstable; urgency=low

  * restore temporary lost changes from version 1:1.6.3.3-2 (closes:
    #530693).
  * new upstream point release.
    * grep: do not segfault when -f is used (closes: 551071).

 -- Gerrit Pape <pape@smarden.org>  Mon, 26 Oct 2009 12:05:18 +0000

git-core (1:1.6.5-1) unstable; urgency=low

  * new upstream release.
    * git-doc: html no longer uses "{plus}" where it should be "+"
      (closes: #529255).
  * debian/git-core.README.source: new; document how to use the
    Debian package source.
  * debian/implicit: update to revision 60d9070.

 -- Gerrit Pape <pape@smarden.org>  Tue, 13 Oct 2009 00:23:00 +0000

git-core (1:1.6.4.3-1) unstable; urgency=low

  * new upstream release (closes: #546709).
    * git-cvsserver: no longer use deprecated 'git-subcommand' commands
      (closes: #536067).
  * branch debian-sid: git cherry-pick 098082f, 318b847, 1f9b620 (thx
    Anders Kaseorg; closes: #546499).

 -- Gerrit Pape <pape@smarden.org>  Wed, 16 Sep 2009 11:03:45 +0000

git-core (1:1.6.3.3-2) unstable; urgency=low

  [ Anders Kaseorg ]
  * Fix manpage formatting: set ASCIIDOC_NO_ROFF instead of
    DOCBOOK_XSL_173 (based on the instructions in Documentation/Makefile)
    and don’t override the internal Makefile variable ASCIIDOC_EXTRA
    (closes: #530693, #521954, #533320).

  [ Gerrit Pape ]
  * debian/control: Standards-Version: 3.8.2.0.

 -- Gerrit Pape <pape@smarden.org>  Mon, 29 Jun 2009 00:06:59 +0000

git-core (1:1.6.3.3-1) unstable; urgency=high

  * new upstream point release.
    * daemon: Strictly parse the "extra arg" part of the command
      (closes: #532935; CVE-2009-2108).
  * debian/rules: add NO_CROSS_DIRECTORY_HARDLINKS=1 to OPTS.
  * debian/diff/0006-bug-520116-Makefile-do-not-install-cross...diff:
    remove; obsolete.

 -- Gerrit Pape <pape@smarden.org>  Tue, 23 Jun 2009 08:49:17 +0000

git-core (1:1.6.3.1-1) unstable; urgency=low

  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Thu, 14 May 2009 21:35:01 +0000

git-core (1:1.6.3-1) unstable; urgency=low

  * new upstream release.
  * merge branch debian-experimental.

 -- Gerrit Pape <pape@smarden.org>  Fri, 08 May 2009 07:57:39 +0000

git-core (1:1.6.3~rc3-1) experimental; urgency=low

  * new upstream release candidate.

 -- Gerrit Pape <pape@smarden.org>  Wed, 29 Apr 2009 21:58:10 +0000

git-core (1:1.6.3~rc1-1) experimental; urgency=low

  * new upstream release candidate.
  * merge branch debian-sid.

 -- Gerrit Pape <pape@smarden.org>  Mon, 20 Apr 2009 21:44:09 +0000

git-core (1:1.6.2.4-1) unstable; urgency=low

  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Mon, 20 Apr 2009 20:22:02 +0000

git-core (1:1.6.3~rc0-1) experimental; urgency=low

  * new upstream release candidate.
  * merge branch debian-sid.

 -- Gerrit Pape <pape@smarden.org>  Tue, 14 Apr 2009 23:06:38 +0000

git-core (1:1.6.2.3-1) unstable; urgency=low

  * new upstream point release.
  * debian/control: Standards-Version: 3.8.1.0.
  * debian/control: change subversion to Subversion in description.
  * debian/control: Section: vcs (except for git-doc).

 -- Gerrit Pape <pape@smarden.org>  Tue, 14 Apr 2009 22:46:43 +0000

git-core (1:1.6.2.2-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/0006-bug-520116-Makefile-do-not-install-cross...diff:
    new; Makefile: do not install cross-directory hardlink (thx Jonathan
    Nieder, closes: #520116).
  * debian/git-daemon/run: run /usr/lib/git-core/git-daemon instead of
    'git daemon' (closes: #522348).
  * debian/git-daemon-run.postinst: on upgrade from >> 1:1.6.0, fixup
    #522348.
  * debian/git-core.emacsen-startup: remove the line
    '(add-to-list 'vc-handled-backends 'git)' (closes: #519728).

 -- Gerrit Pape <pape@smarden.org>  Sun, 05 Apr 2009 20:49:25 +0000

git-core (1:1.6.2.1-1) unstable; urgency=low

  * new upstream point release.
  * debian/git-core.emacsen-startup: no longer refer to vc-git.el
    (closes: #519728).

 -- Gerrit Pape <pape@smarden.org>  Mon, 16 Mar 2009 22:18:05 +0000

git-core (1:1.6.2-1) unstable; urgency=medium

  * new upstream release.
  * merge branch debian-experimental.
  * debian/diff/0006-Install-builtins-with-the-user-and-group-of...diff,
    debian/diff/0007-git-quiltimport-preserve-standard-input-to...diff:
    remove; applied upstream.

 -- Gerrit Pape <pape@smarden.org>  Wed, 04 Mar 2009 22:44:43 +0000

git-core (1:1.6.2~rc2-1) experimental; urgency=low

  * merge branch debian-sid.
  * new upstream release candidate.

 -- Gerrit Pape <pape@smarden.org>  Thu, 26 Feb 2009 22:15:13 +0000

git-core (1:1.6.1.3-2) unstable; urgency=high

  * debian/diff/0006-Install-builtins-with-the-user-and-group-of...diff:
    new from upstream git: Install builtins with the user and group of
    the installing personality.
  * debian/diff/0007-git-quiltimport-preserve-standard-input-to...diff:
    new from upstream git: git-quiltimport: preserve standard input to
    be able to read user input (closes: #515910).

 -- Gerrit Pape <pape@smarden.org>  Thu, 26 Feb 2009 22:01:37 +0000

git-core (1:1.6.2~rc1-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/git-core.docs, debian/git-doc.docs, debian/rules: move
    Documentation/RelNotes* from git-doc to the git-core package
    (closes: #514866).

 -- Gerrit Pape <pape@smarden.org>  Tue, 17 Feb 2009 20:20:03 +0000

git-core (1:1.6.2~rc0-1) experimental; urgency=low

  * new upstream release candidate.
  * merge branch debian-sid.

 -- Gerrit Pape <pape@smarden.org>  Tue, 10 Feb 2009 00:06:02 +0000

git-core (1:1.6.1.3-1) unstable; urgency=low

  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Mon, 09 Feb 2009 21:31:39 +0000

git-core (1:1.6.1.2-1) experimental; urgency=low

  * new upstream release.
    * don't fail to clone over http if connection is rate limited
      (closes: #512795).
    * git svn info no longer fails (closes: #499243).
  * debian/rules: ASCIIDOC_EXTRA='-a asciidoc7compatible -a docbook-xsl-172'
    and DOCBOOK_XSL_173=Yes when building documentation (thx Niko Tyni
    for the patch, closes: #497883).
  * merge branch debian-lenny.
  * debian/diff/0005-gitweb-do-not-run-git-diff-that-is-Porcelain.diff:
    remove; fixed upstream.

 -- Gerrit Pape <pape@smarden.org>  Mon, 02 Feb 2009 23:26:45 +0000

git-core (1:1.5.6.5-3) unstable; urgency=high

  * debian/rules: no longer install symlink /etc/init.d/git-daemon ->
    /usr/bin/sv (closes: #511687).
  * debian/git-daemon-run.README.Debian: document how to create the
    symlink manually to have an LSB compatible /etc/init.d/git-daemon
    interface to control the service.

 -- Gerrit Pape <pape@smarden.org>  Mon, 02 Feb 2009 20:56:15 +0000

git-core (1:1.6.0.6-1) experimental; urgency=low

  * debian/control: git-email: Recommends: libnet-smtp-ssl-perl,
    libauthen-sasl-perl (thx Kees Cook, closes: #505636).
  * debian/diff/0005-bug-506445-hooks-post-receive-email-set-...diff:
    new; hooks/post-receive-email: set encoding to utf-8 (thx Alexander
    Gerasiov, closes: #506445).
  * new upstream point release (closes: #504641).
    * gitweb: do not run "git diff" that is Porcelain.

 -- Gerrit Pape <pape@smarden.org>  Sat, 20 Dec 2008 11:03:49 +0000

git-core (1:1.5.6.5-2) unstable; urgency=high

  * debian/diff/0005-gitweb-do-not-run-git-diff-that-is-Porcelain.diff:
    new; fix possible gitweb vulnerability: calling "git diff": Jakub
    says that legacy-style URI to view two blob differences are never
    generated since 1.4.3.  This codepath runs "git diff" Porcelain from
    the gitweb, which is a no-no.  It can trigger diff.external command
    that is specified in the configuration file of the repository being
    viewed.

 -- Gerrit Pape <pape@smarden.org>  Wed, 17 Dec 2008 09:27:01 +0000

git-core (1:1.6.0.4-1) experimental; urgency=low

  * new upstream point release.
  * debian/control: git-email: minor update to the long description
    (thx Gerfried Fuchs, closes: #501559).
  * debian/rules: TCLTK_PATH=/usr/bin/wish instead of wish8.5 in OPTS.
  * debian/control: git-gui, gitk: Depends: tk (>= 8.4) instead of
    tk8.5 (thx Adeodato Simó, closes: #503113).
  * debian/rules: move the /usr/bin/git-cvsserver program into the
    git-cvs package.

 -- Gerrit Pape <pape@smarden.org>  Tue, 11 Nov 2008 22:36:05 +0000

git-core (1:1.6.0.3-1) experimental; urgency=low

  * debian/control: minor update to long descriptions (thx Reuben
    Thomas, closes: #499065).
  * debian/git-core.emacsen-startup: new; emacsen-startup configuration
    file (thx Jari Aalto, closes: #472197).
  * debian/rules: install emacsen-startup configuration file into the
    git-core package (thx Eddy Mulyono, closes: #446027).
  * new upstream point release.
  * debian/git-core.conffiles: add /etc/emacs/site-start.d/50git-core.el

 -- Gerrit Pape <pape@smarden.org>  Tue, 04 Nov 2008 20:26:56 +0000

git-core (1:1.6.0.2-1) experimental; urgency=low

  * new upstream point release.
  * debian/git-core.NEWS.Debian: new; mention that most of the programs
    now are installed outside the default $PATH; the "git-xyzzy" form
    in scripts and on the command line is no longer supported in 1.6.0.
  * debian/git-core.README.Debian: fix paths in config example (thx
    Michael Biebl for the patch, closes: #498741).
  * debian/git-core.README.Debian: typo (thx Vincent Bernat for the
    patch, closes: #496834).

 -- Gerrit Pape <pape@smarden.org>  Wed, 24 Sep 2008 20:55:26 +0000

git-core (1:1.6.0.1-1) experimental; urgency=low

  * new upstream point release (closes: #496155).
  * merge branch debian-sid.

 -- Gerrit Pape <pape@smarden.org>  Wed, 27 Aug 2008 07:53:36 +0000

git-core (1:1.6.0-1) experimental; urgency=low

  * new upstream release.
    * svnimport: newer libsvn wants us to ask for the root with "",
      not "/" (closes: #492522, #490400).
    * Keep some git-* programs in $(bindir); Move all dashed-form
      commands to libexecdir (closes: #461212).
    * bash: Add more option completions for 'git log' (closes:
      #490220).
    * Fix buffer overflow in prepare_attr_stack; Fix buffer overflow
      in git diff; Fix buffer overflow in git-grep (closes: #494097).
  * 0002-bug-438793-git-sh-setup.sh-builtin-tag.c-fallback.diff: redo
    as 0002-bug-438793-494505-fallback-to-editor-not-vi.diff (thx
    Jonathan Nieder for the patch, closes: #494505).
  * debian/rules: add gitexecdir=/usr/lib/git-core to OPTS; adapt
    several paths (thx Jonathan Nieder for a patch, closes: #480396).
  * debian/gitweb.NEWS.Debian: new; talk about files moved from
    /var/www/ to /usr/share/gitweb/ (see #479479; closes: #494467).
  * debian/git-daemon/run: run git daemon instead of git-daemon
    (dash-less form).
  * debian/git-daemon-run.postinst: add gitdaemon system user.
  * debian/git-daemon/run: utilize chpst to run git daemon as user
    gitdaemon (thx Daniel Kahn Gillmor, closes: #494991).

 -- Gerrit Pape <pape@smarden.org>  Sun, 24 Aug 2008 22:31:44 +0000

git-core (1:1.5.6.5-1) unstable; urgency=high

  * new upstream point release.
    * Fix buffer overflow in prepare_attr_stack; Fix buffer overflow
      in git diff; Fix buffer overflow in git-grep (CVE-2008-3546;
      closes: #494097).
  * debian/diff/0005-bug-494097-CVE-2008-3546.diff: remove; obsolete.

 -- Gerrit Pape <pape@smarden.org>  Sun, 24 Aug 2008 19:22:02 +0000

git-core (1:1.5.6.3-1.1) unstable; urgency=high

  * Non-maintainer upload by the Security Team.
  * Fix various stack-based buffer overflows when processing overly long
    repository pathnames which can be exploited to execute arbitrary code if
    a victim is tricked into using git-grep or git-diff on a crafted
    repository (CVE-2008-3546; Closes: #494097).

 -- Nico Golde <nion@debian.org>  Sat, 09 Aug 2008 13:53:13 +0200

git-core (1:1.5.6.3-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/0005-git-svn.perl-workaround-assertions-in-svn...diff:
    remove; applied upstream (opens: #490400).
  * debian/control: Standards-Version: 3.8.0.1.

 -- Gerrit Pape <pape@smarden.org>  Thu, 17 Jul 2008 07:40:08 +0000

git-core (1:1.5.6.2-1) unstable; urgency=low

  * new upstream point release (closes: #489431).
  * debian/copyright: apply patch from Ansgar Burchardt: adopt proposed
    machine-readable format; clarify some license information (thx,
    closes: #488351).
  * debian/rules: package gitweb: install gitweb.css, git-favicon.png,
    git-logo.png into /usr/share/gitweb/ instead of /var/www/ (closes:
    #479479).
  * debian/control: package git-arch: no longer Suggests: bazaar
    (closes: #486726).
  * debian/diff/0005-git-svn.perl-workaround-assertions-in-svn...diff:
    new; git-svn.perl: workaround assertions in svn library 1.5.0
    (closes: #489108).

 -- Gerrit Pape <pape@smarden.org>  Sun, 06 Jul 2008 18:35:27 +0000

git-core (1:1.5.6-1) unstable; urgency=low

  * new upstream release.
  * merge branch debian-experimental.

 -- Gerrit Pape <pape@smarden.org>  Thu, 19 Jun 2008 07:38:31 +0000

git-core (1:1.5.6~rc3-1) experimental; urgency=low

  * debian/git-daemon-run.postrm: remove log files on purge.
  * new upstream release candidate.
  * debian/control: package git-core: no longer Depends: cpio, no
    longer Recommends: curl.

 -- Gerrit Pape <pape@smarden.org>  Sun, 15 Jun 2008 11:14:49 +0000

git-core (1:1.5.6~rc2-1) experimental; urgency=low

  * new upstream release candidate.
  * merge branch debian-sid.
  * debian/rules: do not build manpages twice (thx Jonathan Nieder).

 -- Gerrit Pape <pape@smarden.org>  Mon, 09 Jun 2008 12:02:43 +0000

git-core (1:1.5.5.4-1) unstable; urgency=low

  * new upstream point release.
  * debian/rules: enable DOCBOOK_XSL_172 build variable, fixing man page
    breakage (thx Jonathan Nieder, closes: #476634).
  * debian/control: Build-Depends: docbook-xsl (>> 1.72) (thx Jonathan
    Nieder).

 -- Gerrit Pape <pape@smarden.org>  Mon, 09 Jun 2008 11:51:19 +0000

git-core (1:1.5.6~rc1-1) experimental; urgency=low

  * new upstream release candidate.
    * git-svn fails in prop_walk if $self->{path} is not empty (closes:
      477393).
    * gitweb: Fix "next" link on bottom of page (closes: #481902).
  * merge branch debian-sid.
  * debian/rules: add THREADED_DELTA_SEARCH=1 to OPTS (closes: #483534).

 -- Gerrit Pape <pape@smarden.org>  Thu, 05 Jun 2008 10:14:14 +0000

git-core (1:1.5.5.3-1) unstable; urgency=low

  * new upstream point release.
    * commit --interactive: properly update the index before commiting
      (closes: #480429).
  * debian/diff/0005-git-bisect.sh-don-t-accidentally-override...diff:
    remove; applied upstream.
  * debian/diff/0005-bug-477337-git-svn.perl-fallback-to-pager...diff:
    new; git-svn.perl: fallback to 'pager' not 'less' if PAGER is unset
    (closes: #477337).

 -- Gerrit Pape <pape@smarden.org>  Wed, 28 May 2008 19:32:57 +0000

git-core (1:1.5.6~rc0-1) experimental; urgency=low

  * merge branch debian-sid.
  * new upstream release candidate.
  * debian/diff/0004-gitweb-fallback-to-system-wide-config-file...diff:
    remove; fixed upstream.
  * debian/diff/0005-git-bisect.sh-don-t-accidentally-override...diff:
    remove; applied upstream.

 -- Gerrit Pape <pape@smarden.org>  Mon, 26 May 2008 16:53:38 +0000

git-core (1:1.5.5.2-1) unstable; urgency=low

  * new upstream point release.
    * diff-options.txt: document the new "--dirstat" option (closes:
      #476437).
  * debian/diff/0005-git-bisect.sh-don-t-accidentally-override...diff:
    new: git-bisect.sh: don't accidentally override existing branch
    "bisect" (closes: #478647).

 -- Gerrit Pape <pape@smarden.org>  Mon, 26 May 2008 16:41:45 +0000

git-core (1:1.5.5.1-1) unstable; urgency=low

  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Mon, 21 Apr 2008 18:24:34 +0000

git-core (1:1.5.5-1) unstable; urgency=low

  * new upstream release.
    * gitk: Fix changing colors through Edit->Preferences (closes: #472615).
    * Revert "gitweb: Add 'status_str' to parse_difftree_raw_line output"
      (closes: #469083).
  * merge branch debian/experimental.

 -- Gerrit Pape <pape@smarden.org>  Tue, 08 Apr 2008 20:26:25 +0000

git-core (1:1.5.5~rc3-2) experimental; urgency=low

  * debian/diff/0004-gitweb-fallback-to-system-wide-config-file-if-defaul.diff:
    amend: properly apply GITWEB_CONFIG_SYSTEM to gitweb.cgi.

 -- Gerrit Pape <pape@smarden.org>  Fri, 04 Apr 2008 20:40:48 +0000

git-core (1:1.5.5~rc3-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff/0004-gitweb-fallback-to-system-wide-config-file-if-defaul.diff:
    new: gitweb: fallback to system-wide config file if default config does
    not exist (closes: #450592).
  * debian/rules: remove GITWEB_CONFIG=/etc/gitweb.conf from OPTS.

 -- Gerrit Pape <pape@smarden.org>  Thu, 03 Apr 2008 19:43:33 +0000

git-core (1:1.5.5~rc2-1) experimental; urgency=low

  * new upstream release candidate.
    * t9600-cvsimport.sh: set HOME before checking for cvsps availability
      (closes: #471969).
    * imap-send: properly error out if imap.host is not set in config
      (closes: #472632).
  * merge branch debian-sid.

 -- Gerrit Pape <pape@smarden.org>  Fri, 28 Mar 2008 08:53:30 +0000

git-core (1:1.5.4.5-1) unstable; urgency=low

  * new upstream point release (closes: #473071).

 -- Gerrit Pape <pape@smarden.org>  Fri, 28 Mar 2008 08:26:39 +0000

git-core (1:1.5.5~rc1-1) experimental; urgency=low

  * new upstream release candidate.

 -- Gerrit Pape <pape@smarden.org>  Sun, 23 Mar 2008 11:55:21 +0000

git-core (1:1.5.5~rc0-1) experimental; urgency=low

  * new upstream release candidate.
    * git-pull documentation: warn about the option order (closes: #463853).
    * hash-object: cleanup handling of command line options (closes:
      #464432).
  * debian/diff/0004-gitk-properly-deal-with-tag-names-containing-sl.diff:
    remove; applied upstream.

 -- Gerrit Pape <pape@smarden.org>  Wed, 19 Mar 2008 07:45:01 +0000

git-core (1:1.5.4.4-1) unstable; urgency=low

  * new upstream point release.
    * templates/Makefile: don't depend on local umask setting (closes:
      #467518).
    * Fix random crashes in http_cleanup() (closes: #468836).
    * send-email: fix In-Reply-To regression (closes: #468153).
    * git-merge.sh: better handling of combined --squash,--no-ff,--no-commit
      options (closes: #468568).

 -- Gerrit Pape <pape@smarden.org>  Mon, 10 Mar 2008 10:38:51 +0000

git-core (1:1.5.4.3-1) unstable; urgency=low

  * new upstream point release.
    * git-clone.sh: properly configure remote even if remote's head is
      dangling (closes: #466581).
  * debian/diff/0004-gitk-properly-deal-with-tag-names-containing-sl.diff:
    new: from upstream master: gitk: properly deal with tag names containing /
    (slash) (closes: #464104).
  * debian/git-daemon-run.postrm: adapt paths in /var/.

 -- Gerrit Pape <pape@smarden.org>  Sun, 24 Feb 2008 16:19:02 +0000

git-core (1:1.5.4.2-2) unstable; urgency=low

  * debian/rules: git-daemon-run: no longer include symlinks for ./supervise/
    subdirectories, update-service now takes care of this.
  * debian/git-daemon-run.postinst: remove ad re-add git-daemon service on
    upgrade from <= 1.5.4.2-1.

 -- Gerrit Pape <pape@smarden.org>  Mon, 18 Feb 2008 22:22:14 +0000

git-core (1:1.5.4.2-1) unstable; urgency=low

  * new upstream point release.
    * cvsimport: have default merge regex also match beginning of commit
      message (thx Frédéric Brière, closes: #463468).
    * builtin-commit: remove .git/SQUASH_MSG upon successful commit (closes:
      #464656).
  * debian/rules: change TCLTK_PATH to /usr/bin/wish8.5 in OPTS.
  * debian/control: Build-Depends: tcl8.5; git-gui, gitk: Depends: tk8.5
    (closes: #456423).
  * debian/git-daemon-run.postinst, debian/git-daemon-run.postrm,
    debian/git-daemon-run.prerm: use runit's update-service program to
    add/remove the git daemon service, instead of dealing with symlinks in
    /var/service/ directly.
  * debian/control: package git-daemon: Depends: runit (>= 1.8.0-2) (1st
    version that provides the update-service program).

 -- Gerrit Pape <pape@smarden.org>  Sun, 17 Feb 2008 18:48:00 +0000

git-core (1:1.5.4.1-1) unstable; urgency=medium

  * debian/control: Build-Depends: cvsps (for selftests, thx Marco Rodrigues,
    closes: #463896).
  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Mon, 11 Feb 2008 12:00:03 +0000

git-core (1:1.5.4-1) unstable; urgency=low

  * merge branch debian-experimental.
  * new upstream release.
  * debian/git-core.README.Debian: add Alias'es for git-favicon.png and
    git-logo.png to the VirtualHost example (thx Frederic Briere, closes:
    #463732).
  * debian/rules: target build-arch-stamp: re-run selftests with --verbose
    on test failures.

 -- Gerrit Pape <pape@smarden.org>  Sun, 03 Feb 2008 05:01:16 +0000

git-core (1:1.5.4~rc5-1) experimental; urgency=low

  * new upstream release candidate.

 -- Gerrit Pape <pape@smarden.org>  Mon, 28 Jan 2008 11:01:08 +0000

git-core (1:1.5.4~rc4-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff/0003-bug-448655-check-etc-mailname-if-author-email-is-un.diff:
    adapt; don't warn if /etc/mailname does not exist (closes: #461844).
  * debian/rules: install /usr/share/gitk/ into the gitk package, not
    git-core.

 -- Gerrit Pape <pape@smarden.org>  Mon, 21 Jan 2008 21:15:21 +0000

git-core (1:1.5.4~rc3-1) experimental; urgency=low

  * merge branch debian-sid.
  * new upstream release candidate.
    * "git pull --tags": error out with a better message (closes: #456035).
    * gitk: use user-configured background in view definition dialog
      (closes: #457124).
  * debian/control: Build-Depends: cvs, libdbd-sqlite3-perl (for selftests).

 -- Gerrit Pape <pape@smarden.org>  Sat, 12 Jan 2008 15:09:23 +0000

git-core (1:1.5.3.8-1) unstable; urgency=low

  * debian/control: for all packages: Suggests: git-doc instead of
    Recommends: (thx Andrew Moise, closes: #455369).
  * debian/control: add Vcs-Git: http://smarden.org/git/git.git/.
  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Tue, 08 Jan 2008 21:01:35 +0000

git-core (1:1.5.4~rc2-1) experimental; urgency=low

  * new upstream release candidate.
    * shortlog manpage documentation: work around asciidoc markup issues
      (closes: #447911).
    * Fix $EDITOR regression introduced by rewrite in C (closes: #446845).

 -- Gerrit Pape <pape@smarden.org>  Thu, 27 Dec 2007 08:45:01 +0000

git-core (1:1.5.4~rc1-1) experimental; urgency=low

  * new upstream release candidate.
    * gitweb: Teach "a=blob" action to be more lenient about blob/file mime
      type (closes: #435610).

 -- Gerrit Pape <pape@smarden.org>  Thu, 20 Dec 2007 09:07:10 +0000

git-core (1:1.5.4~rc0-1) experimental; urgency=low

  * new upstream release candidate.
    * build with correct version information (on amd64, closes: #454935,
      #454408).
    * git-reset: add -q option to operate quietly (closes: #444933).
    * gitk: disable colours when calling git log (closes: #454420).
    * "git svnimport" was removed in favor of "git svn" (closes: #436930,
      #447325, #447965, #451037).
    * git-commit: allow grouping of short options (closes: #407241).
  * debian/diff/0004-contrib-hooks-post-receive-email-make-subject-prefix.diff,
    debian/diff/0005-Don-t-cache-DESTDIR-in-perl-perl.mak.diff: remove;
    applied upstream.
  * debian/rules: install git-gui's lib/ directory plus subdirectory
    properly.
  * debian/control: Build-Depends: gettext.

 -- Gerrit Pape <pape@smarden.org>  Thu, 13 Dec 2007 14:08:45 +0000

git-core (1:1.5.3.7-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/0005-Don-t-cache-DESTDIR-in-perl-perl.mak.diff: new; don't
    cache DESTDIR in perl/perl.mak (#452077).
  * debian/rules: remove $(MAKE) -C perl clean to remove the perl/perl.mak
    again, this is now handled through debian/diff/0005 (thx Pierre
    Habouzit, #452077).

 -- Gerrit Pape <pape@smarden.org>  Mon,  3 Dec 2007 10:17:11 +0000

git-core (1:1.5.3.6-1.1) unstable; urgency=low

  * Non-maintainer upload: Gerrit is currently changing home, and this bug is
    preventing people from installing git, I took the initiative to fix it
    before his return.
  * debian/rules: force a $(MAKE) -C perl clean to remove the perl/perl.mak
    that remembers our DESTDIR and makes perl modules be installed in
    debian/git-core/ in the install-indep target again
    (closes: #452077, #452078, #452080, #452111, #452324).

 -- Pierre Habouzit <madcoder@debian.org>  Thu, 22 Nov 2007 00:40:08 +0100

git-core (1:1.5.3.6-1) unstable; urgency=low

  * debian/implicit: add proper dependencies to support 'parallel build'
    through make -j (thx Daniel Schepler for the patch).
  * debian/rules: support 'nocheck' in DEB_BUILD_OPTIONS to skip running
    the selftests.
  * debian/diff/0003-bug-448655-check-etc-mailname-if-author-email-is-un.diff:
    new; check /etc/mailname if author email is unknown (closes: #448655).
  * debian/gitweb.docs: new; install gitweb/README.
  * new upstream point release.
    * git-cvsimport: really convert underscores in branch names to dots with
      -u (closes: #446495).
    * git-mailsplit: with maildirs not only process cur/, but also new/
      (closes: #447396).
  * debian/diff/0004-contrib-hooks-post-receive-email-make-subject-prefix.diff:
    new; cherry-pick'ed from master: contrib/hooks/post-receive-email: make
    subject prefix configurable (closes: #428418).

 -- Gerrit Pape <pape@smarden.org>  Mon, 19 Nov 2007 12:32:11 +0000

git-core (1:1.5.3.5-1) unstable; urgency=low

  * new upstream point release.
    * git-config: handle --file option with relative pathname properly;
      git-config: print error message if the config file cannot be read;
      git-config: don't silently ignore options after --list (closes:
      #445208).

 -- Gerrit Pape <pape@smarden.org>  Thu, 01 Nov 2007 08:35:46 +0000

git-core (1:1.5.3.4-1) unstable; urgency=low

  * new upstream point release (closes: #445188).

 -- Gerrit Pape <pape@smarden.org>  Thu, 04 Oct 2007 08:27:01 +0000

git-core (1:1.5.3.3-1) unstable; urgency=low

  * new upstream point release.

 -- Gerrit Pape <pape@smarden.org>  Sun, 30 Sep 2007 09:25:06 +0000

git-core (1:1.5.3.2-1) unstable; urgency=low

  * new upstream point release.
    * git-svn: fix "Malformed network data" with svn:// servers (closes:
      #430091, #436142).
    * git-commit: Allow partial commit of file removal (closes: #437817).
    * git-gui: lib/index.tcl: handle files with % in the filename properly
      (closes: #441167).
    * git-clone: improve error message if curl program is missing or not
      executable (closes: #440976).
  * debian/git-daemon-run.postinst: use 'sv -v term git-daemon' instead of
    'sv restart git-daemon' to restart git-daemon service if it was running.
  * debian/control: git-core: no longer Suggests: cogito, which was removed.
  * debian/diff/genindex.diff: apply and remove.
  * debian/gitweb.conf: comment out $home_link, and set to gitweb.cgi's
    default (thx Ansgar Burchardt for the patch, closes: 441694).

 -- Gerrit Pape <pape@smarden.org>  Thu, 20 Sep 2007 07:28:41 +0000

git-core (1:1.5.3.1-1) unstable; urgency=low

  * new upstream point release.
  * debian/control: git-daemon-run: improve long description (closes:
    #440699).
  * debian/git-daemon-run.README.Debian: improve.
  * debian/control: git-svn: improve long description.
  * debian/control: git-cvs: improve long description.
  * debian/control: git-core: improve long description (closes: #412560).

 -- Gerrit Pape <pape@smarden.org>  Tue, 04 Sep 2007 18:18:33 +0000

git-core (1:1.5.3-1) unstable; urgency=low

  * merge branch debian-experimental.
  * new upstream release.
  * debian/control: git-email: move libemail-valid-perl from Depends: to
    Recommends: (thx Uwe Kleine-Koenig, closes: #439902).
  * debian/control: git-email: no longer Depends: libmail-sendmail-perl (thx
    Uwe Kleine-Koenig).

 -- Gerrit Pape <pape@smarden.org>  Sun, 02 Sep 2007 16:41:54 +0000

git-core (1:1.5.3~rc7-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff/0002-git-merge-do-up-to-date-check-also-for-all-strategie.diff:
    remove; included upstream.

 -- Gerrit Pape <pape@smarden.org>  Wed, 29 Aug 2007 12:22:16 +0000

git-core (1:1.5.3~rc6-1) experimental; urgency=low

  * new upstream release candidate.
    * git-am: initialize variable $resume on startup (closes: #435807).
  * debian/diff/0002-git-merge-do-up-to-date-check-also-for-all-strategie.diff:
    new; http://article.gmane.org/gmane.comp.version-control.git/55981.
  * debian/diff/0003-git-sh-setup.sh-fallback-to-editor-not-vi-if-VI.diff:
    new; git-sh-setup.sh: fallback to 'editor' not 'vi' if $VISUAL and $EDITOR
    are unset (thx Mike Hommey, closes: #438793).
  * merge branch debian-sid.

 -- Gerrit Pape <pape@smarden.org>  Sun, 26 Aug 2007 09:54:16 +0000

git-core (1:1.5.2.5-2) unstable; urgency=low

  * debian/git-core.conffiles: new; add /etc/bash_completion.d/git.

 -- Gerrit Pape <pape@smarden.org>  Sun, 26 Aug 2007 09:49:39 +0000

git-core (1:1.5.2.5-1) unstable; urgency=low

  * debian/control: fix typo in Build-Depends: libcurl4-gnutls-dev |
    libcurl3-gnutls-dev (thx Mikael Eriksson, closes: #433196).
  * new upstream point release.
  * debian/rules: add TCLTK_PATH=/usr/bin/wish8.4 to OPTS (closes: #438662).
  * dbian/control: git-core: Depends: cpio (closes: #438057).
  * debian/git-core.README.Debian: fix typos (closes: #438932).
  * debian/versions.upstream, debian/changelog.upstream: adapt.
  * debian/rules, debian/control: install git-completion.bash from contrib as
    /etc/bash_completion.d/git; git-core: Conflicts:, Provides:, Replaces:
    git-completion (closes: #437532, thx Sebastian Harl).

 -- Gerrit Pape <pape@smarden.org>  Sat, 25 Aug 2007 17:56:20 +0000

git-core (1:1.5.3~rc4-1) experimental; urgency=low

  * new upstream release candidate.

 -- Gerrit Pape <pape@smarden.org>  Sat, 04 Aug 2007 13:02:05 +0000

git-core (1:1.5.3~rc3-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/versions.upstream, debian/changelog.upstream: adapt.

 -- Gerrit Pape <pape@smarden.org>  Fri, 27 Jul 2007 11:13:52 +0000

git-core (1:1.5.3~rc2-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff/????-Pack-objects-properly-initialize-the-depth-value.diff:
    remove; obsolete.
  * debian/control, debian/rules: remove git-p4 package again, moved into
    contrib/ upstream; see /usr/share/doc/git-core/contrib/p4import/.
  * debian/versions.upstream, debian/changelog.upstream: adapt.

 -- Gerrit Pape <pape@smarden.org>  Fri, 20 Jul 2007 08:47:45 +0000

git-core (1:1.5.3~rc1-1) experimental; urgency=low

  * new upstream release candidate.
    * git-commit: don't add multiple Signed-off-by: from the same identity
      (closes: #430851).
    * Fix core.sharedRepository = 2 (closes: #432698).
  * merge branch debian-sid.
  * debian/versions.upstream, debian/changelog.upstream: adapt.
  * debian/diff/0002-gitk-properly-resolve-ambiguity-if-argument-is-both.diff:
    remove; doesn't apply anymore.
  * debian/diff/0002-Pack-objects-properly-initialize-the-depth-value.diff:
    new; on upstream advice.

 -- Gerrit Pape <pape@smarden.org>  Sat, 14 Jul 2007 11:45:27 +0000

git-core (1:1.5.2.4-1) unstable; urgency=low

  * new upstream point release.
  * debian/rules: build documentation with ASCIIDOC8=YesPlease (closes:
    #432560).
  * debian/control: Build-Depends: asciidoc (>> 8.0.0).
  * debian/diff/????-git-gui-properly-popup-error-if-gitk-should-be-start.diff:
    remove; merged upstream.
  * debian/control: Build-Depends: libcurl4-gnutls-dev | libcurl3-gnutsl-dev
    (closes: #432812).
  * debian/versions.upstream, debian/changelog.upstream: adapt.

 -- Gerrit Pape <pape@smarden.org>  Fri, 13 Jul 2007 19:13:38 +0000

git-core (1:1.5.3~rc0-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/changelog.upstream.sh: run git shortlog with option --no-merges.
  * debian/versions.upstream, debian/changelog.upstream: update.
  * debian/diff/0003-git-svn-trailing-slash-in-prefix-is-mandatory-with.diff,
    debian/diff/0004-git-cvsimport-force-checkout-of-working-tree-after-i.diff:
    remove; applied upstream.
  * debian/diff/00*.diff: adapt.
  * debian/rules: put git-gui, git-citool man pages into package git-gui.

 -- Gerrit Pape <pape@smarden.org>  Tue, 03 Jul 2007 10:01:12 +0000

git-core (1:1.5.2.3-1) unstable; urgency=low

  * new upstream point release.
  * debian/control: package git-gui: Replaces: git-core (<< 1:1.5.2.2-3)
    (thx Frank Lichtenheld, closes: #431481).
  * debian/versions.upstream, debian/changelog.upstream: update.

 -- Gerrit Pape <pape@smarden.org>  Tue, 03 Jul 2007 08:26:11 +0000

git-core (1:1.5.2.2-3) unstable; urgency=low

  * debian/rules: move /usr/share/git-gui/ from git-core package into
    git-gui package (thx Ansgar Burchardt, closes: #430530).
  * debian/diff/0004-git-cvsimport-force-checkout-of-working-tree-after-i.diff:
    new; git-cvsimport: force checkout of working tree after initial import
    (closes: #430903).
  * debian/diff/0005-git-gui-properly-popup-error-if-gitk-should-be-start.diff:
    new; git-gui: properly popup error if gitk should be started but is not
    installed (#429810).
  * debian/control: git-gui: Recommends: gitk (closes: #429810).
  * debian/rules: workaround #427907: compile with -O0 instead of -O2 on hppa
    (#429389).

 -- Gerrit Pape <pape@smarden.org>  Fri, 29 Jun 2007 12:54:39 +0000

git-core (1:1.5.2.2-2) unstable; urgency=low

  * debian/control: all Architecture: all packages: Depends: git-core (>>
    ${source:Upstream-Version}, git-core (<< ${source:Upstream-Version}-.)
    instead of (= ${source:Version}) to support binNMUs (closes: #423041,
    #430128).

 -- Gerrit Pape <pape@smarden.org>  Sat, 23 Jun 2007 14:02:36 +0000

git-core (1:1.5.2.2-1) unstable; urgency=low

  * new upstream point release.
    * Fix typo in remote branch example in git user manual (closes: #427502).
  * debian/diff/0003-git-branch-track-fix-tracking-branch-computation.diff:
    remove; applied upstream.
  * debian/versions.upstream: new; ordered list of upstream versions,
    starting with 1.0.0.
  * debian/changelog.upstream.sh: new; create changelog.upstream from git
    shortlog using debian/versions.upstream.
  * debian/changelog.upstream: re-created through changelog.upstream.sh.
  * debian/diff/0003-git-svn-trailing-slash-in-prefix-is-mandatory-with.diff:
    new; git-svn: trailing slash in prefix is mandatory with --branches/-b
    (closes: #429443).

 -- Gerrit Pape <pape@smarden.org>  Tue, 19 Jun 2007 17:32:30 +0000

git-core (1:1.5.2.1-2) unstable; urgency=low

  * debian/diff/0003-git-branch-track-fix-tracking-branch-computation.diff:
    new; from upstream master: git-branch --track: fix tracking branch
    computation.

 -- Gerrit Pape <pape@smarden.org>  Fri,  8 Jun 2007 09:04:47 +0000

git-core (1:1.5.2.1-1) unstable; urgency=low

  * new upstream point release.
    * Create a new manpage for the gitignore format, and reference it
      elsewhere (thx Josh Triplett, closes: #427078).
  * debian/diff/0002-gitk-properly-resolve-ambiguity-if-argument-is-both.diff:
    new; properly resolve ambiguity if argument is both, revision and
    filename (closes: #425491).
  * debian/control: git-core: Conflicts: git (<< 4.3.20-11) (/usr/bin/git
    transition).
  * debian/git-daemon-run.README.Debian: new (#422139).
  * debian/control: all Architecture: all packages: Depends: git-core
    (= ${source:Version}) instead of (>= ...); this makes it no longer
    support binNMUs (closes: #425494, reopens: #423041).

 -- Gerrit Pape <pape@smarden.org>  Sun, 03 Jun 2007 10:09:53 +0000

git-core (1:1.5.2-1) unstable; urgency=low

  * merge branch debian-experimental.
  * new upstream release.
    * gitweb: choose appropriate view for file type if a= parameter missing
      (closes: #410465).
    * git fetch -q is supported (closes: #423165).
  * /usr/bin/git transition (thx Ian Beckwith!).
    * debian/git-core.preinst: new; remove /usr/bin/git alternative if
      upgrading from versions older than 1:1.5.2~rc3-2.
    * debian/git-core.prerm, debian/git-core.postinst: remove; no longer
      handle /usr/bin/git alternative through update-alternatives.
    * debian/rules: no longer install git program as git-scm.

 -- Gerrit Pape <pape@smarden.org>  Wed, 30 May 2007 12:38:45 +0000

git-core (1:1.5.2~rc3-2) experimental; urgency=low

  * debian/diff/0000-maint-branch-from-20070514.diff: remove; obsolete.
  * debian/control: package git-p4: Section: contrib/devel (closes:
    #422755).
  * debian/control: package git-p4: Depends: git-core (>= ${source:Version})
    instead of (= ${Source-Version}) (to support binNMUs).

 -- Gerrit Pape <pape@smarden.org>  Tue, 15 May 2007 21:33:06 +0000

git-core (1:1.5.1.4-2) unstable; urgency=low

  * debian/diff/0000-maint-branch-from-20070514.diff: new; snapshot upstream
    maint branch 20070514:
    * includes git-svn fixes (closes: #423599, #423226).
  * deian/rules: reverse order when applying diffs (fix typo).
  * debian/control: all Architecture: all packages: Depends: git-core (>=
    ${source:Version}) instead of (= ${Source-Version}) (to support binNMUs,
    closes: #423041).

 -- Gerrit Pape <pape@smarden.org>  Mon, 14 May 2007 13:15:50 +0000

git-core (1:1.5.2~rc3-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff/0002-Optimize-directory-listing-with-pathspec-limiter.diff:
    remove; included upstream.
  * debian/control: Build-Depends: tcl8.4 (for gitgui).
  * debian/rules: add symlink /etc/init.d/git-daemon -> /usr/bin/sv to
    git-daemon-run package (#422139).

 -- Gerrit Pape <pape@smarden.org>  Mon, 14 May 2007 10:10:02 +0000

git-core (1:1.5.1.4-1) unstable; urgency=medium

  * new upstream point release.
  * debian/diff/pager-vs-less.diff: rename to
    0001-pager.c-fallback-to-pager-not-less-if-PAGER-is.diff; adapt.
  * debian/diff/0002-Optimize-directory-listing-with-pathspec-limiter.diff:
    new: Optimize directory listing with pathspec limiter (closes: #420671).
  * debian/git-daemon-run.postinst: restart git-daemon service if it was
    running.

 -- Gerrit Pape <pape@smarden.org>  Wed, 09 May 2007 08:48:50 +0000

git-core (1:1.5.2~rc2-1) experimental; urgency=low

  * new upstream release candidate.

 -- Gerrit Pape <pape@smarden.org>  Mon, 07 May 2007 18:02:53 +0000

git-core (1:1.5.2~rc1-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/control, debian/rules: new package git-p4: tools for importing
    development history from perforce repositories.
  * debian/rules: add WITH_P4IMPORT=1 to OPTS; no longer install
    git-p4import.py into /usr/share/doc/git-core/contrib/; add OPTS to
    make clean in target clean:; add PYTHON_PATH=/usr/bin/python to OPTS.

 -- Gerrit Pape <pape@smarden.org>  Tue, 01 May 2007 12:28:15 +0000

git-core (1:1.5.1.3-1) unstable; urgency=low

  * new upstream point release.
    * git-add tried to optimize by finding common leading directories
      across its arguments but botched, causing very confused behaviour
      (closes: #420671).
    * Documentation/git-reset.txt: suggest git commit --amend in example
      (closes: #420112).
    * unofficial rpm.spec file shipped with git was letting ETC_GITCONFIG
      set to /usr/etc/gitconfig.  Tweak the official Makefile to make it
      harder for distro people to make the same mistake, by setting the
      variable to /etc/gitconfig if prefix is set to /usr (closes:
      #420675).
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcement.

 -- Gerrit Pape <pape@smarden.org>  Tue, 01 May 2007 08:59:06 +0000

git-core (1:1.5.1.2-1) unstable; urgency=low

  * new upstream point release.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcement.

 -- Gerrit Pape <pape@smarden.org>  Sun, 22 Apr 2007 13:31:05 +0000

git-core (1:1.5.1.1-1) unstable; urgency=low

  * new upstream point release.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcement.
  * debian/diff/0010-rename-contrib-hooks-post-receieve-email-to-contrib.diff:
    remove; applied upstream.

 -- Gerrit Pape <pape@smarden.org>  Thu, 12 Apr 2007 09:05:44 +0000

git-core (1:1.5.1-1) unstable; urgency=low

  * new upstream release.
    * git-svn got almost a rewrite (closes: #416372).
  * debian/diff/git-cvsserver-update-hook.diff: remove; included upstream.
  * debian/diff/Documentation-git-svnimport.txt-fix-typo.diff,
    debian/diff/http-fetch-don-t-use-double-slash-as-directory-sepa.diff,
    debian/diff/Documentation-git-rev-parse.txt-fix-example-in-SPEC.diff:
    remove; applied upstream.
  * debian/diff/GNU-Hurd.diff: remove; obsolete.
  * debian/git-daemon-run.postrm: check for deluser being available, if
    not, print warning and don't remove system user (closes: #416755).
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcement, and git shortlog.
  * debian/diff/0010-rename-contrib-hooks-post-receieve-email-to-contrib.diff:
    new; rename contrib/hooks/post-receieve-email to contrib/hooks/post-
    receive-email.

 -- Gerrit Pape <pape@smarden.org>  Wed,  4 Apr 2007 11:56:18 +0000

git-core (1:1.5.0.6-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/http-fetch-don-t-use-double-slash-as-directory-sepa.diff:
    new, cherry-pick'ed from upstream master: http-fetch: don't use
    double-slash as directory separator in URLs (closes: #409887).
  * debian/diff/Documentation-git-svnimport.txt-fix-typo.diff: new:
    Documentation/git-svnimport.txt: fix typo.
  * debian/diff/Documentation-git-rev-parse.txt-fix-example-in-SPEC.diff:
    new Documentation/git-rev-parse.txt: fix example in SPECIFYING RANGES
    (closes: #404795).
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements.

 -- Gerrit Pape <pape@smarden.org>  Thu, 29 Mar 2007 10:51:00 +0000

git-core (1:1.5.0.5-1) unstable; urgency=low

  * new upstream point release.
  * debian/rules: make sure subdirectories of /usr/share/doc/git-core/ are
    mode 0755 (closes: #415328); remove .gitignore file(s) from
    /usr/share/doc/git-core/ (closes: #413913).
  * debian/control: git-svn: Depends: libterm-readkey-perl (thx Pierre
    Habouzit, closes: #415475).
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements.

 -- Gerrit Pape <pape@smarden.org>  Wed, 21 Mar 2007 17:02:27 +0000

git-core (1:1.5.0.3-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/cvsexportcommit-.msg.diff: remove; applied upstream.
  * debian/git-core.docs, debian/git-doc.docs: add RelNotes.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements.

 -- Gerrit Pape <pape@smarden.org>  Mon,  5 Mar 2007 19:44:05 +0000

git-core (1:1.5.0.2-1) unstable; urgency=low

  * new upstream point release.
  * debian/control: git-core: Conflicts: qgit (<< 1.5.5) (closes: #412452).
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements.
  * debian/diff/cvsexportcommit-.msg.diff: new; don't cleanup .msg if not
    yet committed to cvs (closes: #412732).

 -- Gerrit Pape <pape@smarden.org>  Wed, 28 Feb 2007 15:50:53 +0000

git-core (1:1.5.0.1-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/git-cvsserver-update-hook.diff: new from upstream pu branch:
    Have git-cvsserver call hooks/update before really altering the ref.
  * debian/control: git-cvs: Depends: libdbd-sqlite3-perl (git-cvsserver).

 -- Gerrit Pape <pape@smarden.org>  Sun, 25 Feb 2007 11:38:34 +0000

git-core (1:1.5.0-1) experimental; urgency=low

  * new upstream release.
  * debian/diff/archimport-empty-dir.diff: remove; applied upstream.
  * debian/diff/pager-vs-less.diff, debian/diff/Add-install-lib-target.diff:
    adapt.
  * debian/control: new package git-gui, the git graphical user interface;
    git-core: no longer Depends:, Build-Depends: rcs; git-core: Suggests:
    git-gui.
  * debian/rules: new package git-gui.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements and git shortlog.
  * debian/git-daemon/run: don't limit git-daemon's memory resources.
  * debian/control, debian/rules: remove git-core-dev package again,
    libgit.a is not a publically usable/useful library at this moment, as
    its internal API is not cast in stone yet.
  * debian/diff/Add-install-lib-target.diff: remove; there's no git-core-dev
    package.

 -- Gerrit Pape <pape@smarden.org>  Fri, 16 Feb 2007 07:18:44 +0000

git-core (1:1.5.0~rc3-1) experimental; urgency=low

  * new upstream release candidate.
  * debian/diff/Add-install-lib-target.diff: new; add install-lib target to
    install libgit.a library plus header files (thx Luca Falavigna).
  * debian/rules: new package git-core-dev; remove obsolete
    WITH_SEND_EMAIL=1, OPTIMIZE="..." from $(OPTS); remove
    WITH_OWN_SUBPROCESS_PY=1 from $(OPTS), it's no longer necessary (thx
    Luca Falavigna; closes: #403731); make git-p4import.pl available through
    /usr/share/doc/git-core/contrib/ (closes: #403387); minor cleanup.
  * debian/control: new package git-core-dev (thx Luca Falavigna; closes:
    #407722); no longer Build-Depends: python; git-core: no longer Recommends:
    python, Suggests: git-core-dev; update short and long descriptions
    (closes: #406323); git-arch: Depends: tla, instead of Suggests:.
  * debian/diff/GNU-Hurd.diff: adapt.
  * debian/diff/archimport-empty-dir.diff: new; git-archimport: initial import
    needs empty directory (closes: #400508).
  * debian/gitweb.README.Debian: typo.

 -- Gerrit Pape <pape@smarden.org>  Sat,  3 Feb 2007 09:32:48 +0000

git-core (1:1.4.4.4-1) unstable; urgency=low

  * new upstream release, important fixes:
    * pack-check.c::verify_packfile(): don't run SHA-1 update on huge data.
    * Fix infinite loop when deleting multiple packed refs.
    * diff --check: fix off by one error.
  * debian/diff/0001-spurious-.sp-in-manpages.diff: remove; included in
    upstream version.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcement.

 -- Gerrit Pape <pape@smarden.org>  Tue,  9 Jan 2007 19:43:56 +0000

git-core (1:1.4.4.3-1) unstable; urgency=medium

  * new upstream release (closes: #404796); important fixes:
    * Make sure the empty tree exists when needed in merge-recursive; the
      error message may make the user think that their database is corrupt
      when its actually not.
    * Don't use memcpy when source and dest. buffers may overlap.
    * cvsserver: Avoid miscounting bytes in Perl v5.8.x; this breaks the
      counting of bytes for the CVS protocol, resulting in the client
      expecting less data than we actually send, and storing truncated files.
  * debian/diff/0001-spurious-.sp-in-manpages.diff: new from upstream git;
    work around spurious .sp in manpages (closes: #388370).
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcement.

 -- Gerrit Pape <pape@smarden.org>  Fri, 29 Dec 2006 07:38:15 +0000

git-core (1:1.4.4.2-1) unstable; urgency=low

  * new upstream release.
    * fixes FTBFS on m68k (thx Roman Zippel, closes: #402022).
  * 0001-archive-zip-don-t-use-sizeof-struct.diff,
    0002-git-svn-error-out-from-dcommit-on-a-parent-less-commit.diff,
    0003-git-svn-correctly-handle-revision-0-in-SVN-repositories.diff,
    0004-git-svn-preserve-uncommitted-changes-after-dcommit.diff,
    0005-Increase-length-of-function-name-buffer.diff: remove; obsolete.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements and git log | git shortlog.

 -- Gerrit Pape <pape@smarden.org>  Fri,  8 Dec 2006 19:13:49 +0000

git-core (1:1.4.4.1-1) unstable; urgency=low

  * new upstream release (closes: #400191).
  * 0001-archive-zip-don-t-use-sizeof-struct.diff: new from upstream git;
    replaces debian/diff/not-packed-structs.diff.
  * 0002-git-svn-error-out-from-dcommit-on-a-parent-less-commit.diff,
    0003-git-svn-correctly-handle-revision-0-in-SVN-repositories.diff,
    0004-git-svn-preserve-uncommitted-changes-after-dcommit.diff,
    0005-Increase-length-of-function-name-buffer.diff: new from upstream
    git.
  * debian/diff/genindex.diff: new; support subdirs in gitweb example index
    generator (thx David Nusinow; closes: #400284).
  * debian/diff/GNU-Hurd.diff, debian/diff/pager-vs-less.diff: adapt.

 -- Gerrit Pape <pape@smarden.org>  Sun, 26 Nov 2006 14:31:39 +0000

git-core (1:1.4.4-2) unstable; urgency=low

  * debian/diff/not-packed-structs.diff: new; don't use sizeof(struct ...),
    size doesn't match on arm (fixes selftests failure on arm).

 -- Gerrit Pape <pape@smarden.org>  Wed, 22 Nov 2006 23:31:11 +0000

git-core (1:1.4.4-1) unstable; urgency=low

  * new upstream release (closes: #399575).
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements.
  * debian/control: Build-Depends: unzip (for selftests).

 -- Gerrit Pape <pape@smarden.org>  Tue, 21 Nov 2006 09:43:37 +0000

git-core (1:1.4.3.5-1) unstable; urgency=low

  * new upstream release.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements.

 -- Gerrit Pape <pape@smarden.org>  Mon, 13 Nov 2006 17:46:50 +0000

git-core (1:1.4.3.3-2) unstable; urgency=medium

  * debian/git-daemon-run.postinst: don't make the log service system user
    gitlog member of group adm, but nogroup; gitlog's home directory is
    /nonexistent (thx Florian Weimer, closes: #396687).
  * debian/git-daemon/log/run: make /var/log/git-daemon log directory mode
    2750, owner gitlog:adm.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements.

 -- Gerrit Pape <pape@smarden.org>  Mon,  6 Nov 2006 20:12:08 +0000

git-core (1:1.4.3.3-1) unstable; urgency=low

  * new upstream release.
  * debian/diff/0001-Set-HOME-for-selftests.diff: remove; applied upstream.
  * debian/control: git-core: Depends: libdigest-sha1-perl (closes: #395304,
    thx Ichthyostega).

 -- Gerrit Pape <pape@smarden.org>  Tue, 31 Oct 2006 07:31:21 +0000

git-core (1:1.4.3.2-1) unstable; urgency=low

  * new upstream release.
  * debian/diff/gitweb.conf.diff: remove; obsolete.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements.
  * debian/rules: add 'GITWEB_CONFIG=/etc/gitweb.conf mandir=/usr/share/man
    OPTIMIZE="-O2 -g -Wall" INSTALLDIRS=vendor' to build OPTS, adapt paths;
    git-arch: don't include git-archive, git-upload-archive; gitweb: install
    git-logo.png, git-favicon.png; git-core: properly install new Git.pm
    plus man page.
  * debian/diff/0001-Set-HOME-for-selftests.diff: new; set $HOME for
    selftests (fixes build/selftest failures).
  * debian/control: git-core: Depends: liberror-perl.

 -- Gerrit Pape <pape@smarden.org>  Tue, 24 Oct 2006 16:32:35 +0000

git-core (1:1.4.2.3-2) unstable; urgency=low

  * debian/control: new package git-daemon-run: provide a git-daemon
    service; git-core: no longer Suggests: runit, Depends: adduser, the
    git-daemon-run package now Depends: runit, adduser.
  * debian/debian/git-core.postinst, debian/git-daemon-run.postrm,
    debian/git-daemon-run.prerm: new; manage gitlog user and git-daemon
    service (closes: #388144).
  * debian/git-core.postinst: no longer adduser gitlog, git-daemon-run
    package does now.
  * debian/git-core.postrm: remove; obsolete.
  * debian/rules: install git-daemon service directory in the new
    git-daemon-run package instead of the git-core package.
  * debian/git-core.conffiles: rename to debian/git-daemon-run.conffiles.
  * debian/git-core.README.Debian: adapt.
  * debian/control: git-core: Suggests: git-daemon-run.

 -- Gerrit Pape <pape@smarden.org>  Sun,  8 Oct 2006 09:29:50 +0000

git-core (1:1.4.2.3-1) unstable; urgency=medium

  * new upstream release.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements.
  * debian/diff/t3403-skip-3-7.diff: remove; git-am is fixed upstream.
  * debian/gitweb.conf: add $stylesheet = "/gitweb.css" (thx Christian
    Kujau, closes: #383065).

 -- Gerrit Pape <pape@smarden.org>  Sun,  8 Oct 2006 07:31:03 +0000

git-core (1:1.4.2.1-1) unstable; urgency=low

  * new upstream release (closes: #386820, #387405).
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcements.
  * debian/diff/GNU-Hurd.diff: new; make the build process detect and
    support the Debian GNU/Hurd architecture (thx Cyril Brulebois, closes:
    #379841).
  * debian/diff/GNU-kFreeBSD.diff: remove; applied upstream.
  * debian/rules: gitweb: install gitweb.css into /var/www/ instead of
    /usr/share/doc/gitweb/ (thx Matthijs Melchior, closes: #383065).
  * debian/gitweb.docs: remove; obsolete.
  * debian/examples/index.aux-generation: example script to generate an
    optional index.aux file for the use with gitweb (thx Matthew Wilcox,
    #383219).
  * debian/gitweb.examples: new; install debian/examples/index.aux-generation
    (#383219).
  * debian/git-core.README.Debian: new; hints on how to set up a
    git.example.org server providing git://, rsync://, http:// access to
    repositories from Matthew Wilcox (thx!, closes: #383219).
  * debian/gitweb.README.Debian: cleanup; refer to git-core.README.Debian.
  * debian/control: git-svn: Depends: libsvn-perl | libsvn-core-perl (thx
    Peter Samuelson); git-core, git-doc: Suggests: gitweb; gitweb:
    Recommends: git-doc.
  * debian/diff/pager-vs-less.diff, debian/diff/gitweb.conf.diff: adapt.
  * debian/git-daemon/: new; git-daemon service directory for the use with
    runit.
  * debian/control: Build-Depends: subversion, libsvn-perl | libsvn-core-perl
    (for git-svn selftests); git-core: Suggests: runit, Depends: adduser.
  * debian/diff/t3403-skip-3-7.diff: new; skip selftests 3,7 in t3403 as
    they fail without a terminal connected.
  * debian/git-core.conffiles: new; add /etc/sv/git-daemon/run,
    /etc/sv/git-daemon/log/run.

 -- Gerrit Pape <pape@smarden.org>  Fri, 15 Sep 2006 12:46:58 +0000

git-core (1:1.4.1.1-1) unstable; urgency=low

  * new upstream release.
  * debian/diff/GNU-kFreeBSD.diff: new; make the build process detect and
    support the Debian GNU/kFreeBSD architecture (thx Petr Salinger, closes:
    #380209).

 -- Gerrit Pape <pape@smarden.org>  Sat, 29 Jul 2006 15:31:04 +0000

git-core (1:1.4.1-2) unstable; urgency=low

  * adopt package gitweb, now included in git-core upstream source (thx
    Andres Salomon):
    * debian/control, debian/rules: build gitweb package.
    * debian/copyright: adapt.
    * debian/gitweb.README.Debian, debian/gitweb.conf, debian/gitweb.docs:
      new; taken from Andres' gitweb package.
    * debian/diff/gitweb.conf.diff: new; adapt Andres' gitweb.conf.patch.
    * debian/gitweb.conffiles: new; /etc/gitweb.conf.
  * debian/changelog: use epoch 1 to supersede gitweb-264 package version.
  * debian/rules: set DESTDIR in environment, not build flags.

 -- Gerrit Pape <pape@smarden.org>  Thu, 27 Jul 2006 21:44:06 +0000

git-core (1.4.1-1) unstable; urgency=low

  * new upstream release.
  * debian/changelog.upstream: upstream changes taken from mailing list
    announcement.
  * debian/rules: user same build flags and prefix to $(MAKE) in build
    and install target to prevent rebuild in install target.

 -- Gerrit Pape <pape@smarden.org>  Tue, 11 Jul 2006 21:38:33 +0000

git-core (1.4.0-1) unstable; urgency=low

  * new upstream release.
  * debian/changelog.upstream: new; upstream changes taken from mailing
    list announcement.
  * debian/rules: install debian/changelog.upstream as upstream changelog.
  * debian/diff/pager-vs-less.diff: adapt.
  * debian/control: Standards-Version: 3.7.2.0.

 -- Gerrit Pape <pape@smarden.org>  Wed, 14 Jun 2006 17:04:56 +0000

git-core (1.3.3-2) unstable; urgency=medium

  * debian/control: git-core: Depends: perl-modules (closes: #369737).
  * debian/diff/pager-vs-less.diff: new; fallback to `pager` not `less`
    if $PAGER is unset (closes: #369742).

 -- Gerrit Pape <pape@smarden.org>  Sat, 10 Jun 2006 11:18:48 +0000

git-core (1.3.3-1) unstable; urgency=low

  * new upstream release.

 -- Gerrit Pape <pape@smarden.org>  Thu, 25 May 2006 10:46:00 +0000

git-core (1.3.2-1) unstable; urgency=low

  * new upstream release.

 -- Gerrit Pape <pape@smarden.org>  Wed, 10 May 2006 20:41:39 +0000

git-core (1.3.1-1) unstable; urgency=low

  * new upstream release (closes: #364678).
  * debian/rules: install contrib/ directory into /usr/share/doc/git-core/.

 -- Gerrit Pape <pape@smarden.org>  Mon,  1 May 2006 13:01:42 +0000

git-core (1.2.6-1) unstable; urgency=low

  * new upstream release.
  * debian/control: git-cvs: Depends: cvsps (>> 2.1-0).

 -- Gerrit Pape <pape@smarden.org>  Sun, 16 Apr 2006 14:37:53 +0000

git-core (1.2.4-1) unstable; urgency=low

  * new upstream release (closes: #354563).

 -- Gerrit Pape <pape@smarden.org>  Fri,  3 Mar 2006 21:33:58 +0000

git-core (1.2.1-1) unstable; urgency=low

  * new upstream release (closes: #353041).
  * debian/control: git-core: Recommends: ssh-client instead of
    openssh-client (closes: #350708).

 -- Gerrit Pape <pape@smarden.org>  Thu, 16 Feb 2006 09:33:42 +0000

git-core (1.1.5-1) unstable; urgency=high

  * new upstream release.
    * checkout: do not make a temporary copy of symlink target.
      If the index records an insanely long symbolic link, copying
      into the temporary would overflow the buffer (noticed by Mark
      Wooding). (closes: #350274).

 -- Gerrit Pape <pape@smarden.org>  Sat, 28 Jan 2006 20:16:44 +0000

git-core (1.1.3-1) unstable; urgency=low

  * new upstream release.

 -- Gerrit Pape <pape@smarden.org>  Mon, 16 Jan 2006 10:19:37 +0000

git-core (1.0.8-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/t6001-rev-lisge-order.sh.diff: remove; applied upstream.
  * debian/control: Build-Depends: libcurl3-gnutls-dev | libcurl3-dev,
    python, asciidoc (>> 7.0.2-3) (ease backport to sarge, thx Norbert
    Tretkowski, closes: #344929).

 -- Gerrit Pape <pape@smarden.org>  Mon,  9 Jan 2006 19:19:36 +0000

git-core (1.0.6-1) unstable; urgency=low

  * new upstream point release.
  * debian/diff/t6001-rev-list-merge-order.sh.diff: new: fix skipping
    merge-order test with NO_OPENSSL=1.
  * debian/rules: re-enable git-rev-list --merge-order selftests.
  * debian/control: git-svn: Depends: libwww-perl (closes: #345045).

 -- Gerrit Pape <pape@smarden.org>  Mon,  2 Jan 2006 20:25:57 +0000

git-core (1.0.5-1) unstable; urgency=low

  * new upstream point release.
  * debian/rules: don't take upstream changelog from upstream
    debian/changelog.
  * debian/changelog.upstream: remove again.

 -- Gerrit Pape <pape@smarden.org>  Tue, 27 Dec 2005 13:25:53 +0000

git-core (1.0.3-1) unstable; urgency=low

  * new upstream point release.
  * debian/changelog.upstream: new: upstream changelog taken from upstream
    debian/changelog.
  * debian/rules: install debian/changelog.upstream as upstream changelog;
    remove obsolete VERSION variable.

 -- Gerrit Pape <pape@smarden.org>  Fri, 23 Dec 2005 14:58:14 +0000

git-core (1.0.0-1) unstable; urgency=medium

  * new upstream release: GIT 1.0.0.

 -- Gerrit Pape <pape@smarden.org>  Wed, 21 Dec 2005 16:17:18 +0000

git-core (0.99.9n-1) unstable; urgency=low

  * new upstream version: GIT 0.99.9n aka 1.0rc6.
  * debian/rules: rename git program in git-core package to git-scm,
    handle /usr/bin/git program through update-alternatives (as suggested
    by Ian Beckwith, see #342363).
  * debian/control: git-core: Conflicts: git (<< 4.3.20-8) (closes:
    #342363).
  * debian/git-core.postinst, debian/git-core.prerm: new: run
    update-alternatives --install /usr/bin/git git /usr/bin/git-scm with
    priority 70 on configure, and --remove on remove respectively.

 -- Gerrit Pape <pape@smarden.org>  Thu, 15 Dec 2005 11:24:51 +0000

git-core (0.99.9m-1) unstable; urgency=low

  * new upstream version: GIT 0.99.9m aka 1.0rc5.
    * sets PYTHONPATH for selftests (fixes autobuild test failures).
  * switch from tarball-in-tarball approach to original upstream tarball.
  * debian/changelog: add changelog history, Junio C Hamano, Ryan Anderson,
    Eric Biederman previously were maintaining this package unofficially.
  * debian/control: Build-Depends: rcs (for selftests); git-core:
    Recommends: patch, less, Suggests: cogito; git-arch: Suggests: tla,
    bazzar; git-cvs: Depends: cvsps, Suggests: cvs; git-svn: Depends:
    libsvn-core-perl (closes:#342617), Suggests: subversion; git-email:
    Depends: libmail-sendmail-perl, libemail-valod-perl; update short
    description (lots taken from upstream unofficial package, thx).
  * debian/git-core.docs, debian/git-doc.docs: adapt.
  * debian/rules: adapt; remove target unpack; add target patch; adapt
    target clean.

 -- Gerrit Pape <pape@smarden.org>  Wed, 14 Dec 2005 19:48:41 +0000

git-core (0.99.9l-1) unstable; urgency=low

  * new upstream version.
  * debian/rules: apply diffs with patch -p1.
  * debian/control, debian/rules: split off git-arch, git-cvs, git-svn,
    git-email packages, as suggested by upstream:
    http://article.gmane.org/gmane.comp.version-control.git/13185
  * debian/git-doc.docs: get docs from temporary install directory;
    include *.txt docs.
  * debian/control: git-doc: Section: doc; Suggests: git-core, git-arch,
    git-cvs, git-svn, git-email, gitk; git-core: Suggests: git-arch,
    git-cvs, git-svn, git-email, gitk.

 -- Gerrit Pape <pape@smarden.org>  Mon,  5 Dec 2005 18:04:37 +0000

git-core (0.99.9k-1) unstable; urgency=low

  * new upstream version.
  * debian/implicit: update to revision 1.11.
  * debian/git-doc.docs: add git/Documentation/howto,
    git/Documentation/technical (closes: #341178).

 -- Gerrit Pape <pape@smarden.org>  Tue, 29 Nov 2005 21:45:53 +0000

git-core (0.99.9j-1) unstable; urgency=low

  * initial version.
  * debian/control: git-core: Replaces: cogito (<< 0.16rc2-0); cogito >=
    0.16rc2-0 no longer includes the git core components, but depends on
    the git-core package (see #338789).

 -- Gerrit Pape <pape@smarden.org>  Fri, 18 Nov 2005 22:26:36 +0000

git-core (0.99.9j-0) unstable; urgency=low

  * GIT 0.99.9j aka 1.0rc3

 -- Junio C Hamano <junkio@cox.net>  Wed, 16 Nov 2005 20:39:55 -0800

git-core (0.99.9i-0) unstable; urgency=low

  * GIT 0.99.9i aka 1.0rc2

 -- Junio C Hamano <junkio@cox.net>  Mon, 14 Nov 2005 18:38:27 -0800

git-core (0.99.9h-0) unstable; urgency=low

  * GIT 0.99.9h

 -- Junio C Hamano <junkio@cox.net>  Fri, 11 Nov 2005 22:33:18 -0800

git-core (0.99.9g-0) unstable; urgency=low

  * GIT 0.99.9g

 -- Junio C Hamano <junkio@cox.net>  Wed,  9 Nov 2005 21:01:55 -0800

git-core (0.99.9f-0) unstable; urgency=low

  * GIT 0.99.9f

 -- Junio C Hamano <junkio@cox.net>  Tue,  8 Nov 2005 01:21:52 -0800

git-core (0.99.9e-0) unstable; urgency=low

  * GIT 0.99.9e

 -- Junio C Hamano <junkio@cox.net>  Sun,  6 Nov 2005 18:37:18 -0800

git-core (0.99.9d-0) unstable; urgency=low

  * GIT 0.99.9d

 -- Junio C Hamano <junkio@cox.net>  Sat,  5 Nov 2005 11:46:37 -0800

git-core (0.99.9c-0) unstable; urgency=low

  * GIT 0.99.9c

 -- Junio C Hamano <junkio@cox.net>  Thu,  3 Nov 2005 15:44:54 -0800

git-core (0.99.9b-0) unstable; urgency=low

  * GIT 0.99.9b

 -- Junio C Hamano <junkio@cox.net>  Tue,  1 Nov 2005 21:39:39 -0800

git-core (0.99.9a-0) unstable; urgency=low

  * GIT 0.99.9a

 -- Junio C Hamano <junkio@cox.net>  Sun, 30 Oct 2005 15:03:32 -0800

git-core (0.99.9.GIT-2) unstable; urgency=low

  * Build Dependency did not include libexpat-dev.

 -- Junio C Hamano <junkio@cox.net>  Sun, 13 Nov 2005 01:55:34 -0800

git-core (0.99.9.GIT-1) unstable; urgency=low

  * Do not scatter txt and html documentation into feature
    subpackages.  Do place man pages into them.
  * Capture more cvs stuff into git-cvs package.

 -- Junio C Hamano <junkio@cox.net>  Tue,  8 Nov 2005 01:19:06 -0800

git-core (0.99.9.GIT-0) unstable; urgency=low

  * Test Build.

 -- Junio C Hamano <junkio@cox.net>  Sat,  5 Nov 2005 11:18:13 -0800

git-core (0.99.9-1) unstable; urgency=low

  * Split the git-core binary package into core, doc, and foreign SCM
    interoperability modules.

 -- Junio C Hamano <junkio@cox.net>  Sat,  5 Nov 2005 11:18:13 -0800

git-core (0.99.9-0) unstable; urgency=low

  * GIT 0.99.9

 -- Junio C Hamano <junkio@cox.net>  Sat, 29 Oct 2005 14:34:30 -0700

git-core (0.99.8-0) unstable; urgency=low

  * GIT 0.99.8

 -- Junio C Hamano <junkio@cox.net>  Sun,  2 Oct 2005 12:54:26 -0700

git-core (0.99.7-0) unstable; urgency=low

  * GIT 0.99.7

 -- Junio C Hamano <junkio@cox.net>  Sat, 10 Sep 2005 18:36:39 -0700

git-core (0.99.6-0) unstable; urgency=low

  * GIT 0.99.6

 -- Junio C Hamano <junkio@cox.net>  Wed, 24 Aug 2005 23:09:35 -0700

git-core (0.99.5-1) unstable; urgency=low

  * Enable git-send-email on Debian.  There is no reason to shy
    away from it, since we have the necessary Perl modules available.

 -- Junio C Hamano <junkio@cox.net>  Thu, 25 Aug 2005 14:16:59 -0700

git-core (0.99.5-0) unstable; urgency=low

  * GIT 0.99.5

 -- Junio C Hamano <junkio@cox.net>  Wed, 10 Aug 2005 22:05:00 -0700

git-core (0.99.4-4) unstable; urgency=low

  * Mark git-tk as architecture neutral.

 -- Junio C Hamano <junkio@cox.net>  Fri, 12 Aug 2005 13:25:00 -0700

git-core (0.99.4-3) unstable; urgency=low

  * Split off gitk.
  * Do not depend on diff which is an essential package.
  * Use dh_movefiles, not dh_install, to stage two subpackages.

 -- Matthias Urlichs <smurf@debian.org>  Thu, 11 Aug 2005 01:43:24 +0200

git-core (0.99.4-2) unstable; urgency=low

  * Git 0.99.4 official release.

 -- Junio C Hamano <junkio@cox.net>  Wed, 10 Aug 2005 15:00:00 -0700

git-core (0.99.4-1) unstable; urgency=low

  * Pass prefix down to the submake when building.

 -- Junio C Hamano <junkio@cox.net>  Sat, 6 Aug 2005 13:00:00 -0700

git-core (0.99-2) unstable; urgency=low

  * Conflict with the GNU Interactive Tools package, which also installs
    /usr/bin/git.
  * Use the Mozilla SHA1 code and/or the PPC assembly in preference to
    OpenSSL.  This is only a partial fix for the license issues with OpenSSL.
  * Minor tweaks to the Depends.

 -- Ryan Anderson <ryan@michonline.com>  Sat, 23 Jul 2005 14:15:00 -0400

git-core (0.99-1) unstable; urgency=low

  * Update deb package support to build correctly. 

 -- Ryan Anderson <ryan@michonline.com>  Thu, 21 Jul 2005 02:03:32 -0400

git-core (0.99-0) unstable; urgency=low

  * Initial deb package support

 -- Eric Biederman <ebiederm@xmission.com>  Tue, 12 Jul 2005 10:57:51 -0600
