Hi,
Assume, I am running in some Git repository, e.g.,
$ git config --get branch.tmp.remote
origin
Then, I get this error:
--8<---------------cut here---------------start------------->8---
$ guix shell -C patman -- patman -h
Traceback (most recent call last):
File "/gnu/store/50q6yz9s0ddfxbwd31sf6lq15hsy97gs-python-u-boot-pylib-2023.07.02/lib/python3.10/site-packages/u_boot_pylib/command.py", line 95, in run_pipe
last_pipe = cros_subprocess.Popen(cmd, cwd=cwd, **kwargs)
File "/gnu/store/50q6yz9s0ddfxbwd31sf6lq15hsy97gs-python-u-boot-pylib-2023.07.02/lib/python3.10/site-packages/u_boot_pylib/cros_subprocess.py", line 83, in __init__
super(Popen, self).__init__(args, stdin=stdin,
File "/gnu/store/p4x29pa0qjb3r76v2bl0jvhld42l0lkq-python-3.10.7/lib/python3.10/subprocess.py", line 969, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/gnu/store/p4x29pa0qjb3r76v2bl0jvhld42l0lkq-python-3.10.7/lib/python3.10/subprocess.py", line 1845, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'git'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/gnu/store/znq8klrhn3wwgfvrq0kqm8krx5xi7fpq-patman-2023.07.02/bin/.patman-real", line 47, in <module>
parser.add_argument('-p', '--project', default=project.detect_project(),
File "/gnu/store/znq8klrhn3wwgfvrq0kqm8krx5xi7fpq-patman-2023.07.02/lib/python3.10/site-packages/patman/project.py", line 19, in detect_project
top_level = gitutil.get_top_level()
File "/gnu/store/znq8klrhn3wwgfvrq0kqm8krx5xi7fpq-patman-2023.07.02/lib/python3.10/site-packages/patman/gitutil.py", line 627, in get_top_level
return command.output_one_line('git', 'rev-parse', '--show-toplevel')
File "/gnu/store/50q6yz9s0ddfxbwd31sf6lq15hsy97gs-python-u-boot-pylib-2023.07.02/lib/python3.10/site-packages/u_boot_pylib/command.py", line 128, in output_one_line
result = run_pipe([cmd], capture=True, oneline=True,
File "/gnu/store/50q6yz9s0ddfxbwd31sf6lq15hsy97gs-python-u-boot-pylib-2023.07.02/lib/python3.10/site-packages/u_boot_pylib/command.py", line 99, in run_pipe
raise Exception("Error running '%s': %s" % (user_pipestr, str))
Exception: Error running 'git rev-parse --show-toplevel': <class 'str'>
--8<---------------cut here---------------end--------------->8---
That’s because ’patman’ runs ’git’ via the file gitutils.py, see:
--8<---------------cut here---------------start------------->8---
-*- mode:grep; default-directory: "/tmp/u-boot-2023.07.02/tools/patman/" -*-
20 candidates:
./gitutil.py:29: cmd = ['git']
./gitutil.py:87: pipe = ['git', 'name-rev', commit_hash]
./gitutil.py:139: remote = command.output_one_line('git', '--git-dir', git_dir, 'config',
./gitutil.py:141: merge = command.output_one_line('git', '--git-dir', git_dir, 'config',
./gitutil.py:231: pipe = ['git']
./gitutil.py:252: pipe = ['git', 'clone', git_dir, '.']
./gitutil.py:265: pipe = ['git']
./gitutil.py:285: pipe = ['git', '--git-dir', git_dir, 'worktree', 'list']
./gitutil.py:300: pipe = ['git', '--git-dir', git_dir, 'worktree', 'add', '.', '--detach']
./gitutil.py:315: pipe = ['git', '--git-dir', git_dir, 'worktree', 'prune']
./gitutil.py:337: cmd = ['git', 'format-patch', '-M']
./gitutil.py:414: 'git', 'config', 'sendemail.suppresscc', raise_on_error=False)
./gitutil.py:496: git_config_to = command.output('git', 'config', 'sendemail.to',
./gitutil.py:511: cmd = ['git', 'send-email', '--annotate']
./gitutil.py:627: return command.output_one_line('git', 'rev-parse', '--show-toplevel')
./gitutil.py:636: fname = command.output_one_line('git', 'config', 'sendemail.aliasesfile',
./gitutil.py:654: uname = command.output_one_line('git', 'config', '--global', 'user.name')
./gitutil.py:664: uemail = command.output_one_line('git', 'config', '--global', 'user.email')
./gitutil.py:675: 'git', 'config', 'format.subjectprefix', raise_on_error=False)
./gitutil.py:699: return command.output_one_line('git', 'show', '-s', '--pretty=format:%H')
--8<---------------cut here---------------end--------------->8---
I propose to wrap ’patman’ with ’git’, see patch.
WDYT?
Cheers,
simon
Simon Tournier (1):
gnu: patman: Wrap program with git.
gnu/packages/bootloaders.scm | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
base-commit: a25a492f2b8604de4ebc21298f24891a1a245161
--
2.38.1
Hi Simon,
Simon Tournier <zimon.toutoune <at> gmail.com> writes:
> * gnu/packages/bootloaders.scm (patman): Replace by 'package/inherit'.
I don't think package/inherit is appropriate here; patman is not a
variant of u-boot (doesn't share any of its inputs) -- it jut happens to
have its source part of the u-boot sources.
I've dropped it.
> [arguments]: Add 'wrap-program' that uses git dependency.
> [inputs]: Add git and git:send-email.
>
> Change-Id: Id4ebadd518f271baa087161b10455ec03d6f959b
> ---
> gnu/packages/bootloaders.scm | 22 ++++++++++++++++++----
> 1 file changed, 18 insertions(+), 4 deletions(-)
>
> Hi,
>
> On Mon, 23 Oct 2023 at 21:05, Maxim Cournoyer <maxim.cournoyer <at> gmail.com> wrote:
>
>> I see 'git send-email' in the above
>
> Good catch! Added. However, I am not happy with the mix of “styles”. And I
> suspect a “bug” or something lacking for packages with multiple outputs; I am
> going to open a report about that. Another story and not blocking, IMHO.
>
>
>> Did you test that this suffices to get a fully
>> self-contained working patman? Maybe you can send a v2 with patman.
[...]
> (substitute* "pyproject.toml"
> (("patman.__main__:run_patman")
> - "patman.__main__")))))))
> - (inputs (list python-pygit2 python-requests python-u-boot-pylib))
> + "patman.__main__"))))
> + (add-after 'install 'wrap-program
> + (lambda* (#:key inputs #:allow-other-keys)
> + (let ((git:send-email (assoc-ref inputs "git:send-email")))
> + (wrap-program (string-append #$output "/bin/patman")
> + `("PATH" ":" prefix
> + (,(string-append #$(this-package-input "git") "/bin")))
> + `("GIT_EXEC_PATH" ":" prefix
> + (,(string-append #$(this-package-input "git") "/libexec/git-core")
> + ,(string-append git:send-email "/libexec/git-core"))))))))))
I think 'search-input-file' would be better here. It should be preferred
to gexps in general, as it is more lazy and works better with
inheritance.
> + (inputs `(("git" ,git)
> + ("git:send-email" ,git "send-email")
> + ("python-pygit2" ,python-pygit2)
> + ("python-requests" ,python-requests)
> + ("python-u-boot-pylib" ,python-u-boot-pylib)))
> (synopsis "Patch automation tool")
> (description "Patman is a patch automation script which:
> @itemize
I modified this to avoid adding labels, which was not necessary. I've
also used wrap-script, which inserts the wrapping in the Python script
directly instead of creating a .patman-real wrapper, which uglifies the
process name in top, for example.
You'll find the result in commit 4c99ef43f0.
Thanks for kicking the ball.
--
Thanks,
Maxim
This bug report was last modified 232 days ago.