mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
u_boot_pylib: Provide directories to gitutil functions
For testing it is useful to be able to set the current directory used for git operations, as well as the git-repo directory. Update some of the functions to support this. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -203,7 +203,7 @@ def run_one(*cmd, **kwargs):
|
||||
return run_pipe([cmd], **kwargs)
|
||||
|
||||
|
||||
def run_list(cmd):
|
||||
def run_list(cmd, **kwargs):
|
||||
"""Run a command and return its output
|
||||
|
||||
Args:
|
||||
@@ -211,8 +211,9 @@ def run_list(cmd):
|
||||
|
||||
Returns:
|
||||
str: output of command
|
||||
**kwargs (dict of args): Extra arguments to pass in
|
||||
"""
|
||||
return run_pipe([cmd], capture=True).stdout
|
||||
return run_pipe([cmd], capture=True, **kwargs).stdout
|
||||
|
||||
|
||||
def stop_all():
|
||||
|
||||
@@ -47,7 +47,7 @@ def log_cmd(commit_range, git_dir=None, oneline=False, reverse=False,
|
||||
return cmd
|
||||
|
||||
|
||||
def count_commits_to_branch(branch):
|
||||
def count_commits_to_branch(branch, git_dir=None, end=None):
|
||||
"""Returns number of commits between HEAD and the tracking branch.
|
||||
|
||||
This looks back to the tracking branch and works out the number of commits
|
||||
@@ -55,16 +55,22 @@ def count_commits_to_branch(branch):
|
||||
|
||||
Args:
|
||||
branch (str or None): Branch to count from (None for current branch)
|
||||
git_dir (str): Path to git repository (None to use default)
|
||||
end (str): End commit to stop before
|
||||
|
||||
Return:
|
||||
Number of patches that exist on top of the branch
|
||||
"""
|
||||
if branch:
|
||||
us, _ = get_upstream('.git', branch)
|
||||
if end:
|
||||
rev_range = f'{end}..{branch}'
|
||||
elif branch:
|
||||
us, msg = get_upstream(git_dir or '.git', branch)
|
||||
if not us:
|
||||
raise ValueError(msg)
|
||||
rev_range = f'{us}..{branch}'
|
||||
else:
|
||||
rev_range = '@{upstream}..'
|
||||
cmd = log_cmd(rev_range, oneline=True)
|
||||
cmd = log_cmd(rev_range, git_dir=git_dir, oneline=True)
|
||||
result = command.run_one(*cmd, capture=True, capture_stderr=True,
|
||||
oneline=True, raise_on_error=False)
|
||||
if result.return_code:
|
||||
@@ -321,7 +327,8 @@ def prune_worktrees(git_dir):
|
||||
raise OSError(f'git worktree prune: {result.stderr}')
|
||||
|
||||
|
||||
def create_patches(branch, start, count, ignore_binary, series, signoff=True):
|
||||
def create_patches(branch, start, count, ignore_binary, series, signoff=True,
|
||||
git_dir=None, cwd=None):
|
||||
"""Create a series of patches from the top of the current branch.
|
||||
|
||||
The patch files are written to the current directory using
|
||||
@@ -334,11 +341,16 @@ def create_patches(branch, start, count, ignore_binary, series, signoff=True):
|
||||
ignore_binary (bool): Don't generate patches for binary files
|
||||
series (Series): Series object for this series (set of patches)
|
||||
signoff (bool): True to add signoff lines automatically
|
||||
git_dir (str): Path to git repository (None to use default)
|
||||
cwd (str): Path to use for git operations
|
||||
Return:
|
||||
Filename of cover letter (None if none)
|
||||
List of filenames of patch files
|
||||
"""
|
||||
cmd = ['git', 'format-patch', '-M']
|
||||
cmd = ['git']
|
||||
if git_dir:
|
||||
cmd += ['--git-dir', git_dir]
|
||||
cmd += ['format-patch', '-M']
|
||||
if signoff:
|
||||
cmd.append('--signoff')
|
||||
if ignore_binary:
|
||||
@@ -351,7 +363,7 @@ def create_patches(branch, start, count, ignore_binary, series, signoff=True):
|
||||
brname = branch or 'HEAD'
|
||||
cmd += [f'{brname}~{start + count}..{brname}~{start}']
|
||||
|
||||
stdout = command.run_list(cmd)
|
||||
stdout = command.run_list(cmd, cwd=cwd)
|
||||
files = stdout.splitlines()
|
||||
|
||||
# We have an extra file if there is a cover letter
|
||||
@@ -436,7 +448,7 @@ def check_suppress_cc_config():
|
||||
|
||||
def email_patches(series, cover_fname, args, dry_run, warn_on_error, cc_fname,
|
||||
alias, self_only=False, in_reply_to=None, thread=False,
|
||||
smtp_server=None):
|
||||
smtp_server=None, cwd=None):
|
||||
"""Email a patch series.
|
||||
|
||||
Args:
|
||||
@@ -456,6 +468,7 @@ def email_patches(series, cover_fname, args, dry_run, warn_on_error, cc_fname,
|
||||
thread (bool): True to add --thread to git send-email (make
|
||||
all patches reply to cover-letter or first patch in series)
|
||||
smtp_server (str or None): SMTP server to use to send patches
|
||||
cwd (str): Path to use for patch files (None to use current dir)
|
||||
|
||||
Returns:
|
||||
Git command that was/would be run
|
||||
@@ -528,7 +541,7 @@ send --cc-cmd cc-fname" cover p1 p2'
|
||||
cmd.append(cover_fname)
|
||||
cmd += args
|
||||
if not dry_run:
|
||||
command.run(*cmd, capture=False, capture_stderr=False)
|
||||
command.run(*cmd, capture=False, capture_stderr=False, cwd=cwd)
|
||||
cmdstr = ' '.join([f'"{x}"' if ' ' in x and not '"' in x else x
|
||||
for x in cmd])
|
||||
return cmdstr
|
||||
@@ -695,7 +708,7 @@ def setup():
|
||||
.return_code == 0)
|
||||
|
||||
|
||||
def get_hash(spec):
|
||||
def get_hash(spec, git_dir=None):
|
||||
"""Get the hash of a commit
|
||||
|
||||
Args:
|
||||
@@ -704,8 +717,11 @@ def get_hash(spec):
|
||||
Returns:
|
||||
str: Hash of commit
|
||||
"""
|
||||
return command.output_one_line('git', 'show', '-s', '--pretty=format:%H',
|
||||
spec)
|
||||
cmd = ['git']
|
||||
if git_dir:
|
||||
cmd += ['--git-dir', git_dir]
|
||||
cmd += ['show', '-s', '--pretty=format:%H', spec]
|
||||
return command.output_one_line(*cmd)
|
||||
|
||||
|
||||
def get_head():
|
||||
@@ -717,13 +733,18 @@ def get_head():
|
||||
return get_hash('HEAD')
|
||||
|
||||
|
||||
def get_branch():
|
||||
def get_branch(git_dir=None):
|
||||
"""Get the branch we are currently on
|
||||
|
||||
Return:
|
||||
str: branch name, or None if none
|
||||
git_dir (str): Path to git repository (None to use default)
|
||||
"""
|
||||
out = command.output_one_line('git', 'rev-parse', '--abbrev-ref', 'HEAD')
|
||||
cmd = ['git']
|
||||
if git_dir:
|
||||
cmd += ['--git-dir', git_dir]
|
||||
cmd += ['rev-parse', '--abbrev-ref', 'HEAD']
|
||||
out = command.output_one_line(*cmd, raise_on_error=False)
|
||||
if out == 'HEAD':
|
||||
return None
|
||||
return out
|
||||
|
||||
Reference in New Issue
Block a user