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

  * new upstream point release (see RelNotes/2.19.2.txt).
    * run-command: do not fall back to cwd when command is not in $PATH.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 22 Nov 2018 14:48:49 -0800

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) 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) 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) 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) 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
