Package: devscripts
Version: 2.10.35
Severity: normal
Tags: patch

debcommit fails if it is run on a git repository with no existing
commits.  To reproduce:

> mkdir -p new-git-repo/debian
> git init new-git-repo
> cd new-git-repo
> *create debian/changelog*
> git add .
> debcommit

Expected results: a commit

Actual output:

> fatal: No HEAD commit to compare with (yet)
> debcommit: unable to determine commit message using git (do you mean
> "debcommit -a" or did you forget to run "git add"?)
> Try using the -m flag.

The problem is that you can't run "git diff --cached" on a repository
with no commits in it.  The patch I've included does a show-ref test on
HEAD before trying to diff, and if it fails it just takes the entire
debian/changelog by diffing it with /dev/null :-)

Now, I'll be honest and say that I'm not sure that this works in every
scenario, just the ones I've tested.  I've made a posting to the git
mailing list about the test's effectivness, and I will post any
additional information I get as soon as I get it, so if you want to
delay this until then that's fine by me.

Cheers,

Eric Gerlach

-- Package-specific info:

--- /etc/devscripts.conf ---

--- ~/.devscripts ---
Not present

-- System Information:
Debian Release: lenny/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: i386 (i686)

Kernel: Linux 2.6.26-1-686 (SMP w/1 CPU core)
Locale: LANG=en_CA.UTF-8, LC_CTYPE=en_CA.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages devscripts depends on:
ii  dpkg-dev                      1.14.20    Debian package development tools
ii  libc6                         2.7-13     GNU C Library: Shared libraries
ii  perl                          5.10.0-13  Larry Wall's Practical Extraction 

Versions of packages devscripts recommends:
ii  at                 3.1.10.1              Delayed job execution and batch pr
ii  bsd-mailx [mailx]  8.1.2-0.20071201cvs-3 A simple mail user agent
ii  conkeror [www-brow 0.9~git080629-1       keyboard focused web browser with 
ii  dctrl-tools        2.13.0                Command-line tools to process Debi
ii  debian-keyring     2008.07.22            GnuPG (and obsolete PGP) keys of D
ii  debian-maintainers 1.42                  GPG keys of Debian maintainers
ii  dput               0.9.2.32              Debian package upload tool
ii  equivs             2.0.7-0.1             Circumvent Debian package dependen
ii  fakeroot           1.9.5                 Gives a fake root environment
ii  git-core           1:1.5.6.5-1           fast, scalable, distributed revisi
ii  gnupg              1.4.9-3               GNU privacy guard - a free PGP rep
ii  libauthen-sasl-per 2.12-1                Authen::SASL - SASL Authentication
ii  libcrypt-ssleay-pe 0.57-1+b1             Support for https protocol in LWP
ii  libparse-debcontro 2.005-2               Easy OO parsing of Debian control-
ii  libsoap-lite-perl  0.710.08-1            Client and server side SOAP implem
ii  libterm-size-perl  0.2-4+b1              Perl extension for retrieving term
ii  libtimedate-perl   1.1600-9              Time and date functions for Perl
ii  liburi-perl        1.35.dfsg.1-1         Manipulates and accesses URI strin
ii  libwww-perl        5.813-1               WWW client/server library for Perl
ii  libyaml-syck-perl  1.05-1                Fast, lightweight YAML loader and 
ii  lintian            1.24.2.1              Debian package checker
ii  lsb-release        3.2-19                Linux Standard Base version report
ii  mailx              1:20071201-3          Transitional package for mailx ren
ii  man-db             2.5.2-2               on-line manual pager
ii  openssh-client [ss 1:5.1p1-2             secure shell client, an rlogin/rsh
ii  patch              2.5.9-5               Apply a diff file to an original
ii  patchutils         0.2.31-4              Utilities to work with patches
ii  strace             4.5.17+cvs080723-2    A system call tracer
ii  unzip              5.52-12               De-archiver for .zip files
ii  wdiff              0.5-18                Compares two files word by word
ii  wget               1.11.4-1              retrieves files from the web

Versions of packages devscripts suggests:
ii  build-essential               11.4       Informational list of build-essent
pn  cvs-buildpackage              <none>     (no description available)
pn  devscripts-el                 <none>     (no description available)
pn  gnuplot                       <none>     (no description available)
pn  libfile-desktopentry-perl     <none>     (no description available)
pn  libnet-smtp-ssl-perl          <none>     (no description available)
pn  mutt                          <none>     (no description available)
pn  svn-buildpackage              <none>     (no description available)

-- no debconf information
--- /usr/bin/debcommit.old      2008-07-26 17:19:54.000000000 -0400
+++ /usr/bin/debcommit  2008-09-05 19:55:43.000000000 -0400
@@ -580,11 +580,19 @@
        } elsif ($prog eq 'bzr') {
            @diffcmd = ($prog, 'diff', '--diff-options', '-wu');
        } elsif ($prog eq 'git') {
-           if ($all) {
-               @diffcmd = ('git', 'diff', '-w', '--no-color');
-           } else {
-               @diffcmd = ('git', 'diff', '-w', '--cached', '--no-color');
-           }
+            # Test to see if there is a valid head in this tree
+            my @test_empty_git_cmd = ('git', 'show-ref', '-h', '-q');
+            # Reutrn value of system will should be 1<<8 = 256
+            if (system(@test_empty_git_cmd) == 256) {
+                # No valid head!  Rather than fail, cheat and use 'diff'
+                @diffcmd = ('diff', '-u', '/dev/null');
+            } else {
+                if ($all) {
+                    @diffcmd = ('git', 'diff', '-w', '--no-color');
+                } else {
+                    @diffcmd = ('git', 'diff', '-w', '--cached', '--no-color');
+                }
+            }
        } elsif ($prog eq 'svn') {
            @diffcmd = ($prog, 'diff', '--diff-cmd', '/usr/bin/diff', 
'--extensions', '-wu');
        } elsif ($prog eq 'svk') {
  • Bug#497995: devscripts: debcommit does not work on a new git ... Eric Gerlach

Reply via email to