Can be used to add an upstream changelog generated from the
git repository to the build dir.

Signed-off-by: Jonathan Nieder <jrnie...@gmail.com>
---
Hi Guido,

Guido Günther wrote:

> As far as I understand that it'd be sufficient to have the hook just in
> front of the actual package build command - that makes sense.

Here’s a try.

I am not so happy about how the documentation (especially gbp.conf) since
unlike the existing hooks, this one is not a ready-made thing.  I
considered

 # update build scripts before building:
 #prebuild = autoreconf -fi

which is a nice and simple example, but it is imho bad practice that I
do not want to encourage.

Maybe it would be nice to have a git-upstream-changelog command so
anyone could use

 prebuild = git-upstream-changelog >debian/changelog.upstream

The tricky bit is coming up with generic code to find the tag
corresponding to a given upstream version (as listed in
debian/changelog).

Thoughts?

 docs/chapters/building.sgml         |    3 ++-
 docs/manpages/git-buildpackage.sgml |   12 ++++++++++++
 gbp.conf                            |    2 ++
 gbp/config.py                       |    1 +
 gbp/git.py                          |    3 +++
 git-buildpackage                    |    7 +++++++
 6 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/docs/chapters/building.sgml b/docs/chapters/building.sgml
index 2205940..f68e378 100644
--- a/docs/chapters/building.sgml
+++ b/docs/chapters/building.sgml
@@ -78,7 +78,8 @@ export-dir=../build-area
     Besides the commands for cleaning the package build dir
     (<option>cleaner</option> and building the package
     (<option>builder</option>) you can also invoke hooks during the package
-    build: after a succesful build (<option>postbuild</option>) and after
+    build: immediately before a build (<option>prebuild</option>,
+    after a succesful build (<option>postbuild</option>) and after
     creating a tag (<option>posttag</option>). Typical applications are running
     <productname>lintian</productname> or pushing changes into a remote
     repository.
diff --git a/docs/manpages/git-buildpackage.sgml 
b/docs/manpages/git-buildpackage.sgml
index a1eac1f..3f2ed28 100644
--- a/docs/manpages/git-buildpackage.sgml
+++ b/docs/manpages/git-buildpackage.sgml
@@ -31,6 +31,7 @@
       
<arg><option>--git-keyid=</option><replaceable>gpg-keyid</replaceable></arg>
       
<arg><option>--git-posttag=</option><replaceable>command</replaceable></arg>
       
<arg><option>--git-postbuild=</option><replaceable>command</replaceable></arg>
+      
<arg><option>--git-prebuild=</option><replaceable>command</replaceable></arg>
       
<arg><option>--git-debian-tag=</option><replaceable>tag-format</replaceable></arg>
       <arg><option>--git-force-create</option></arg>
       <arg><option>--git-no-create-orig</option></arg>
@@ -193,6 +194,17 @@
         </listitem>
       </varlistentry>
       <varlistentry>
+        
<term><option>--git-prebuild=</option><replaceable>command</replaceable>
+        </term>
+        <listitem>
+          <para>execute <replaceable>command</replaceable> from the build
+          directory before calling <application>debuild</application>
+          or the application specified via 
<option>--git-builder</option>.</para>
+          <para>Exported environment variables are:
+          <envar>GBP_GIT_DIR</envar> (the repository the package is being 
built from),
+          <envar>GBP_BUILD_DIR</envar> (the build dir).
+        </listitem>
+      <varlistentry>
         
<term><option>--git-debian-tag=</option><replaceable>tag-format</replaceable>
         </term>
         <listitem>
diff --git a/gbp.conf b/gbp.conf
index 9fe94e5..6024922 100644
--- a/gbp.conf
+++ b/gbp.conf
@@ -28,6 +28,8 @@
 #posttag = git-push git.example.com
 # call lintian after a successful build:
 #postbuild = lintian $GBP_CHANGES_FILE
+# let package generate upstream changelog before build:
+#prebuild = GIT_DIR=$GBP_GIT_DIR debian/autogen.sh
 # use this for more svn-buildpackage like behaviour:
 #export-dir = ../build-area/
 #tarball-dir = ../tarballs/
diff --git a/gbp/config.py b/gbp/config.py
index 7c93200..a0ca547 100644
--- a/gbp/config.py
+++ b/gbp/config.py
@@ -37,6 +37,7 @@ class GbpOptionParser(OptionParser):
                  'keyid'           : '',
                  'posttag'         : '',
                  'postbuild'       : '',
+                 'prebuild'        : '',
                  'postimport'      : '',
                  'debian-tag'      : 'debian/%(version)s',
                  'upstream-tag'    : 'upstream/%(version)s',
diff --git a/gbp/git.py b/gbp/git.py
index 8546a83..4a1f2eb 100644
--- a/gbp/git.py
+++ b/gbp/git.py
@@ -62,6 +62,9 @@ class GitRepository(object):
             stdin = None
         return stdin
 
+    def git_dir(self):
+        return os.path.join(path,'.git')
+
     def has_branch(self, branch, remote=False):
         """
         check if the repository has branch 'branch'
diff --git a/git-buildpackage b/git-buildpackage
index dba20a9..96520c6 100755
--- a/git-buildpackage
+++ b/git-buildpackage
@@ -258,6 +258,8 @@ def main(argv):
                       help="command to build the Debian package, default is 
'%(builder)s'")
     cmd_group.add_config_file_option(option_name="cleaner", dest="cleaner",
                       help="command to clean the working copy, default is 
'%(cleaner)s'")
+    cmd_group.add_config_file_option(option_name="prebuild", dest="prebuild",
+                      help="command to run before a build, default is 
'%(prebuild)s'")
     cmd_group.add_config_file_option(option_name="postbuild", dest="postbuild",
                       help="hook run after a successful build, default is 
'%(postbuild)s'")
     cmd_group.add_config_file_option(option_name="posttag", dest="posttag",
@@ -376,6 +378,11 @@ def main(argv):
             else:
                 build_dir = repo_dir
 
+            if options.prebuild:
+                RunAtCommand(options.prebuild, shell=True,
+                             extra_env={'GBP_GIT_DIR': repo.git_dir(),
+                                        'GBP_BUILD_DIR': 
build_dir})(dir=build_dir)
+
             # Finally build the package:
             RunAtCommand(options.builder, dpkg_args, shell=True, 
                          extra_env={'GBP_BUILD_DIR': build_dir})(dir=build_dir)
-- 
1.7.2.rc1.527.gff41c3.dirty




-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to