u_boot_pylib: Add more functions to gitutil

Add functions for checking a branch, showing a commit, etc. to support
the new functionality.

Git version 2.34.1 ignores --stat if --quiet is given, so adjust the
args so that this performs as expected.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2025-05-10 13:04:56 +02:00
parent 212ed6bdb7
commit 31a1c4c9d8

View File

@@ -784,6 +784,102 @@ def check_dirty(git_dir=None, work_tree=None):
return command.output(*cmd).splitlines()
def check_branch(name, git_dir=None):
"""Check if a branch exists
Args:
name (str): Name of the branch to check
git_dir (str): Path to git repository (None to use default)
"""
cmd = ['git']
if git_dir:
cmd += ['--git-dir', git_dir]
cmd += ['branch', '--list', name]
# This produces ' <name>' or '* <name>'
out = command.output(*cmd).rstrip()
return out[2:] == name
def rename_branch(old_name, name, git_dir=None):
"""Check if a branch exists
Args:
old_name (str): Name of the branch to rename
name (str): New name for the branch
git_dir (str): Path to git repository (None to use default)
Return:
str: Output from command
"""
cmd = ['git']
if git_dir:
cmd += ['--git-dir', git_dir]
cmd += ['branch', '--move', old_name, name]
# This produces ' <name>' or '* <name>'
return command.output(*cmd).rstrip()
def get_commit_message(commit, git_dir=None):
"""Gets the commit message for a commit
Args:
commit (str): commit to check
git_dir (str): Path to git repository (None to use default)
Return:
list of str: Lines from the commit message
"""
cmd = ['git']
if git_dir:
cmd += ['--git-dir', git_dir]
cmd += ['show', '--quiet', commit]
out = command.output(*cmd)
# the header is followed by a blank line
lines = out.splitlines()
empty = lines.index('')
msg = lines[empty + 1:]
unindented = [line[4:] for line in msg]
return unindented
def show_commit(commit, msg=True, diffstat=False, patch=False, colour=True,
git_dir=None):
"""Runs 'git show' and returns the output
Args:
commit (str): commit to check
msg (bool): Show the commit message
diffstat (bool): True to include the diffstat
patch (bool): True to include the patch
colour (bool): True to force use of colour
git_dir (str): Path to git repository (None to use default)
Return:
list of str: Lines from the commit message
"""
cmd = ['git']
if git_dir:
cmd += ['--git-dir', git_dir]
cmd += ['show']
if colour:
cmd.append('--color')
if not msg:
cmd.append('--oneline')
if diffstat:
cmd.append('--stat')
else:
cmd.append('--quiet')
if patch:
cmd.append('--patch')
cmd.append(commit)
return command.output(*cmd)
if __name__ == "__main__":
import doctest