[U-Boot] [PATCH 1/2] buildman: Allow conflicting tags to avoid spurious errors

Conflicting tags can prevent buildman from building two series which exist one after the other in a branch. There is no reason not to allow this sort of workflow with buildman, so ignore conflicting tags in buildman.
Signed-off-by: Simon Glass sjg@chromium.org --- tools/buildman/control.py | 5 +++++ tools/patman/series.py | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/tools/buildman/control.py b/tools/buildman/control.py index 8d7b9b5..1ce8b6f 100644 --- a/tools/buildman/control.py +++ b/tools/buildman/control.py @@ -137,6 +137,11 @@ def DoBuildman(options, args): upstream_commit = gitutil.GetUpstream(options.git_dir, options.branch) series = patchstream.GetMetaDataForList(upstream_commit, options.git_dir, 1) + # Conflicting tags are not a problem for buildman, since it does not use + # then. For example, Series-version is not useful for buildman. On the + # other hand conflicting tags will cause an error. So allow later tags + # to overwrite earlier ones. + series.allow_overwrite = True series = patchstream.GetMetaDataForList(range_expr, options.git_dir, None, series)
diff --git a/tools/patman/series.py b/tools/patman/series.py index 783b3dd..85ed316 100644 --- a/tools/patman/series.py +++ b/tools/patman/series.py @@ -40,6 +40,7 @@ class Series(dict): notes: List of lines in the notes changes: (dict) List of changes for each version, The key is the integer version number + allow_overwrite: Allow tags to overwrite an existing tag """ def __init__(self): self.cc = [] @@ -49,6 +50,7 @@ class Series(dict): self.cover = None self.notes = [] self.changes = {} + self.allow_overwrite = False
# Written in MakeCcFile() # key: name of patch file @@ -72,7 +74,7 @@ class Series(dict): """ # If we already have it, then add to our list name = name.replace('-', '_') - if name in self: + if name in self and not self.allow_overwrite: values = value.split(',') values = [str.strip() for str in values] if type(self[name]) != type([]):

Rather than a backtrace, produce a nice error message when an invalid branch is provided to buildman.
Signed-off-by: Simon Glass sjg@chromium.org --- tools/buildman/control.py | 4 ++++ tools/patman/gitutil.py | 21 +++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/tools/buildman/control.py b/tools/buildman/control.py index 1ce8b6f..85a4a34 100644 --- a/tools/buildman/control.py +++ b/tools/buildman/control.py @@ -111,6 +111,10 @@ def DoBuildman(options, args): print col.Color(col.RED, str) sys.exit(1) count = gitutil.CountCommitsInBranch(options.git_dir, options.branch) + if count is None: + str = "Branch '%s' not found or has no upstream" % options.branch + print col.Color(col.RED, str) + sys.exit(1) count += 1 # Build upstream commit also
if not count: diff --git a/tools/patman/gitutil.py b/tools/patman/gitutil.py index e31da15..b7f6739 100644 --- a/tools/patman/gitutil.py +++ b/tools/patman/gitutil.py @@ -56,10 +56,14 @@ def GetUpstream(git_dir, branch): Returns: Name of upstream branch (e.g. 'upstream/master') or None if none """ - remote = command.OutputOneLine('git', '--git-dir', git_dir, 'config', - 'branch.%s.remote' % branch) - merge = command.OutputOneLine('git', '--git-dir', git_dir, 'config', - 'branch.%s.merge' % branch) + try: + remote = command.OutputOneLine('git', '--git-dir', git_dir, 'config', + 'branch.%s.remote' % branch) + merge = command.OutputOneLine('git', '--git-dir', git_dir, 'config', + 'branch.%s.merge' % branch) + except: + return None + if remote == '.': return merge elif remote and merge: @@ -78,9 +82,11 @@ def GetRangeInBranch(git_dir, branch, include_upstream=False): branch: Name of branch Return: Expression in the form 'upstream..branch' which can be used to - access the commits. + access the commits. If the branch does not exist, returns None. """ upstream = GetUpstream(git_dir, branch) + if not upstream: + return None return '%s%s..%s' % (upstream, '~' if include_upstream else '', branch)
def CountCommitsInBranch(git_dir, branch, include_upstream=False): @@ -90,9 +96,12 @@ def CountCommitsInBranch(git_dir, branch, include_upstream=False): git_dir: Directory containing git repo branch: Name of branch Return: - Number of patches that exist on top of the branch + Number of patches that exist on top of the branch, or None if the + branch does not exist. """ range_expr = GetRangeInBranch(git_dir, branch, include_upstream) + if not range_expr: + return None pipe = [['git', '--git-dir', git_dir, 'log', '--oneline', '--no-decorate', range_expr], ['wc', '-l']]

On Thu, May 02, 2013 at 05:46:02PM -0700, Simon Glass wrote:
Conflicting tags can prevent buildman from building two series which exist one after the other in a branch. There is no reason not to allow this sort of workflow with buildman, so ignore conflicting tags in buildman.
Signed-off-by: Simon Glass sjg@chromium.org
tools/buildman/control.py | 5 +++++ tools/patman/series.py | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/tools/buildman/control.py b/tools/buildman/control.py index 8d7b9b5..1ce8b6f 100644 --- a/tools/buildman/control.py +++ b/tools/buildman/control.py @@ -137,6 +137,11 @@ def DoBuildman(options, args): upstream_commit = gitutil.GetUpstream(options.git_dir, options.branch) series = patchstream.GetMetaDataForList(upstream_commit, options.git_dir, 1)
- # Conflicting tags are not a problem for buildman, since it does not use
- # then. For example, Series-version is not useful for buildman. On the
s/then/them/
Feel free to fix in-line and pull request.
Reviewed-by: Tom Rini trini@ti.com

Hi Tom,
On Fri, May 3, 2013 at 5:25 PM, Tom Rini trini@ti.com wrote:
On Thu, May 02, 2013 at 05:46:02PM -0700, Simon Glass wrote:
Conflicting tags can prevent buildman from building two series which exist one after the other in a branch. There is no reason not to allow this sort of workflow with buildman, so ignore conflicting tags in buildman.
Signed-off-by: Simon Glass sjg@chromium.org
tools/buildman/control.py | 5 +++++ tools/patman/series.py | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/tools/buildman/control.py b/tools/buildman/control.py index 8d7b9b5..1ce8b6f 100644 --- a/tools/buildman/control.py +++ b/tools/buildman/control.py @@ -137,6 +137,11 @@ def DoBuildman(options, args): upstream_commit = gitutil.GetUpstream(options.git_dir, options.branch) series = patchstream.GetMetaDataForList(upstream_commit, options.git_dir, 1)
- # Conflicting tags are not a problem for buildman, since it does not use
- # then. For example, Series-version is not useful for buildman. On the
s/then/them/
Feel free to fix in-line and pull request.
Reviewed-by: Tom Rini trini@ti.com
OK, will do.
Regards, Simon

On Mon, May 6, 2013 at 8:33 AM, Simon Glass sjg@chromium.org wrote:
Hi Tom,
On Fri, May 3, 2013 at 5:25 PM, Tom Rini trini@ti.com wrote:
On Thu, May 02, 2013 at 05:46:02PM -0700, Simon Glass wrote:
Conflicting tags can prevent buildman from building two series which exist one after the other in a branch. There is no reason not to allow this sort of workflow with buildman, so ignore conflicting tags in buildman.
Signed-off-by: Simon Glass sjg@chromium.org
tools/buildman/control.py | 5 +++++ tools/patman/series.py | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/tools/buildman/control.py b/tools/buildman/control.py index 8d7b9b5..1ce8b6f 100644 --- a/tools/buildman/control.py +++ b/tools/buildman/control.py @@ -137,6 +137,11 @@ def DoBuildman(options, args): upstream_commit = gitutil.GetUpstream(options.git_dir, options.branch) series = patchstream.GetMetaDataForList(upstream_commit, options.git_dir, 1)
- # Conflicting tags are not a problem for buildman, since it does not use
- # then. For example, Series-version is not useful for buildman. On the
s/then/them/
Feel free to fix in-line and pull request.
Reviewed-by: Tom Rini trini@ti.com
OK, will do.
Fixed typo, and:
Applied to x86/patman.
participants (2)
-
Simon Glass
-
Tom Rini