diff options
author | Kees Cook <keescook@chromium.org> | 2021-11-30 16:11:25 -0800 |
---|---|---|
committer | Konstantin Ryabitsev <konstantin@linuxfoundation.org> | 2021-12-13 17:28:18 -0500 |
commit | 460990bdca13805f7e9b5d6c8037437f655bcfac (patch) | |
tree | 000524be6f07952c868a04a44994c1381e83785a | |
parent | 36971ee3ad62a56f40c3663a82b7475151df2a77 (diff) | |
download | korg-helpers-460990bdca13805f7e9b5d6c8037437f655bcfac.tar.gz |
patchwork-bot: Handle repo being a worktree
Locate the real git location when operating on a worktree, allowing
multiple pw.db files to be stored in a single top-level git repo.
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Link: https://lore.kernel.org/r/20211201001126.4106635-5-keescook@chromium.org
-rw-r--r-- | git-patchwork-bot.example.yaml | 1 | ||||
-rwxr-xr-x | git-patchwork-bot.py | 27 |
2 files changed, 26 insertions, 2 deletions
diff --git a/git-patchwork-bot.example.yaml b/git-patchwork-bot.example.yaml index c3f6c1e..94ab334 100644 --- a/git-patchwork-bot.example.yaml +++ b/git-patchwork-bot.example.yaml @@ -53,6 +53,7 @@ repos: # For the notification emails treename: 'khilman/linux-amlogic.git' # Optional: limit checking to a single branch (instead of --heads) + # This becomes a required setting if the repo path is a worktree. #branch: 'origin/master' # For the notification emails, must include %s commitlink: 'https://git.kernel.org/khilman/linux-amlogic/c/%.12s' diff --git a/git-patchwork-bot.py b/git-patchwork-bot.py index fc4d9e3..9be945d 100755 --- a/git-patchwork-bot.py +++ b/git-patchwork-bot.py @@ -1054,8 +1054,28 @@ def pwrun(repo, rsettings): logger.info('Could not get the latest ref in %s', repo) sys.exit(1) + dbpath = repo + # If we're aimed at a worktree, move up from the ".git" file to + # the worktree directory. + if not os.path.isdir(dbpath): + gitdir = open(dbpath).readline().strip() + if not gitdir.startswith('gitdir: '): + logger.info('Could not find git tree in %s', dbpath) + sys.exit(1) + gitdir = gitdir.split(' ', 1)[1] + gitdir, worktree = os.path.split(gitdir) + gitdir, category = os.path.split(gitdir) + if category != "worktrees": + logger.info('Could not find git worktree in %s', dbpath) + sys.exit(1) + # To store multiple pw.db files in a single .git directory, + # add a suffix based on the repo treename. + treename = rsettings.get('treename').replace('/', '_') + dbpath = os.path.join(gitdir, f'pw-{treename}.db') + else: + dbpath = os.path.join(dbpath, 'pw.db') + # Do we have a pw.db there yet? - dbpath = os.path.join(repo, 'pw.db') db_exists = os.path.isfile(dbpath) dbconn = sqlite3.connect(dbpath, sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES) c = dbconn.cursor() @@ -1295,10 +1315,13 @@ def check_repos(): for repo in CONFIG['repos']: fullpath = os.path.join(cmdargs.reposdir.rstrip('/'), repo.lstrip('/')) - if not os.path.isdir(fullpath): + if not os.path.exists(fullpath): logger.info('Repository not found: %s', repo) continue settings = CONFIG['repos'][repo] + if not os.path.isdir(fullpath) and settings.get('branch', None) == None: + logger.info('Worktree must specify "branch" setting: %s', repo) + continue logger.info('Processing: %s', repo) pwrun(fullpath, settings) |