Subject: bug#66704: closed (Re: [bug#66704] [PATCH v2] gnu: patman: Wrap program with git.)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 14 Sep 2024 13:03:02 +0000

Your bug report

#66704: [PATCH 0/1] patman depends on Git

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
66704: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=66704
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: [bug#66704] [PATCH v2] gnu: patman: Wrap program with git.
From: Maxim Cournoyer <[email-masked]>
To: Simon Tournier <[email-masked]>
Cc: [email-masked], Vagrant Cascadian <[email-masked]>, Efraim Flashner <[email-masked]>
Date: Sat, 14 Sep 2024 22:01:33 +0900
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi Simon,

Simon Tournier <[email-masked]> 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 <[email-masked]> 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

Subject: [PATCH 0/1] patman depends on Git
From: Simon Tournier <[email-masked]>
To: [email-masked]
Cc: Simon Tournier <[email-masked]>
Date: Mon, 23 Oct 2023 18:07:56 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

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