Daniel Dehennin <daniel.dehen...@baby-gnu.org> writes:

> Daniel Dehennin <daniel.dehen...@baby-gnu.org> writes:
>
> Hello,
>
> [...]
>
>> I still don't know what to do with the "version not found error"
>
> With this new version of my patch, guess_snapshot_commit is called if
> the changelog was just created.
>
> The "version not found error" remains when there was no previous
> debian/changelog.
>
> For this case, we could find the merge-base between upstream tag/branch
> and HEAD.
>
> What do you think about that last idea?

Here is a working patch, it needs some cleanup.

Regards

From a4a49ae814dca2cdbbe753951a728d4f2ca07fcf Mon Sep 17 00:00:00 2001
From: Daniel Dehennin <daniel.dehen...@baby-gnu.org>
Date: Sat, 12 May 2012 18:00:04 +0200
Subject: [PATCH] Use common ancestor between HEAD and upstream as "--since"
 when creating new changelog.

* gbp/scripts/dch.py (main): Add processing of upstream-tree and
  upstream-branch options.
  Find the common ancestor between current HEAD and latest upstream tag
  or upstream branch.  Avoid creating a second changelog entry when
  snapshot was requested.
---
 gbp/scripts/dch.py |   20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/gbp/scripts/dch.py b/gbp/scripts/dch.py
index ccdac96..0309aa4 100644
--- a/gbp/scripts/dch.py
+++ b/gbp/scripts/dch.py
@@ -359,6 +359,8 @@ def main(argv):
     parser.add_option_group(custom_group)
 
     parser.add_boolean_config_file_option(option_name = "ignore-branch", 
dest="ignore_branch")
+    naming_group.add_config_file_option(option_name="upstream-tree", 
dest="upstream_tree")
+    naming_group.add_config_file_option(option_name="upstream-branch", 
dest="upstream_branch")
     naming_group.add_config_file_option(option_name="debian-branch", 
dest="debian_branch")
     naming_group.add_config_file_option(option_name="upstream-tag", 
dest="upstream_tag")
     naming_group.add_config_file_option(option_name="debian-tag", 
dest="debian_tag")
@@ -443,8 +445,22 @@ def main(argv):
                 else:
                     gbp.log.info("Couldn't find snapshot header, using version 
info")
             if not since:
-                # FIXME: When creating a new package: find merge base between 
HEAD and origin
-                since = repo.find_version(options.debian_tag, cp['Version'])
+                # Take care of newly created debian/changelog
+                if hasattr(cp, 'first') and cp.first:
+                    pattern = options.upstream_tag % dict(version='*')
+                    try:
+                        upstream = repo.find_tag('HEAD', pattern=pattern)
+                    except GitRepositoryError:
+                        gbp.debug('No upstream tag found')
+                        upstream = options.upstream_branch
+                    if options.upstream_tree == 'branch':
+                        upstream = options.upstream_branch
+                    since = repo.get_merge_base('HEAD', upstream)
+                    if since and options.snapshot:
+                        # Snapshot can not be guessed
+                        found_snapshot_header = True
+                else:
+                    since = repo.find_version(options.debian_tag, 
cp['Version'])
                 if not since:
                     raise GbpError, "Version %s not found" % cp['Version']
 
-- 
1.7.10


-- 
Daniel Dehennin
Récupérer ma clef GPG:
gpg --keyserver pgp.mit.edu --recv-keys 0x7A6FE2DF

Attachment: pgpyVG9nsbRYt.pgp
Description: PGP signature

Reply via email to