all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* build-aux/git-hooks/pre-push
       [not found] <875y9cef96.fsf.ref@yahoo.com>
@ 2023-05-01  6:29 ` Po Lu
  2023-05-01  6:33   ` build-aux/git-hooks/pre-push Po Lu
  2023-05-01 16:55   ` build-aux/git-hooks/pre-push Jim Porter
  0 siblings, 2 replies; 10+ messages in thread
From: Po Lu @ 2023-05-01  6:29 UTC (permalink / raw)
  To: emacs-devel

This script apparently loses when pushing from a separate worktree,
where .git is a file containing the name of the repository the worktree
was created from.

The following adjustment seems to fix it.  However, I don't know much
about git.  Objections?

diff --git a/build-aux/git-hooks/pre-push b/build-aux/git-hooks/pre-push
index 8e8277cba4f..8a2866f9d4c 100755
--- a/build-aux/git-hooks/pre-push
+++ b/build-aux/git-hooks/pre-push
@@ -83,4 +83,4 @@ $awk -v origin_name="$1" '
     # Print every SHA after oldref, up to (and including) newref.
     system("git rev-list --first-parent --reverse " oldref ".." newref)
   }
-' | $awk -v reason=pre-push -f .git/hooks/commit-msg-files.awk
+' | $awk -v reason=pre-push -f build-aux/git-hooks/commit-msg-files.awk



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: build-aux/git-hooks/pre-push
  2023-05-01  6:29 ` build-aux/git-hooks/pre-push Po Lu
@ 2023-05-01  6:33   ` Po Lu
  2023-05-02  5:35     ` build-aux/git-hooks/pre-push Jim Porter
  2023-05-01 16:55   ` build-aux/git-hooks/pre-push Jim Porter
  1 sibling, 1 reply; 10+ messages in thread
From: Po Lu @ 2023-05-01  6:33 UTC (permalink / raw)
  To: emacs-devel

Po Lu <luangruo@yahoo.com> writes:

> This script apparently loses when pushing from a separate worktree,
> where .git is a file containing the name of the repository the worktree
> was created from.
>
> The following adjustment seems to fix it.  However, I don't know much
> about git.  Objections?
>
> diff --git a/build-aux/git-hooks/pre-push b/build-aux/git-hooks/pre-push
> index 8e8277cba4f..8a2866f9d4c 100755
> --- a/build-aux/git-hooks/pre-push
> +++ b/build-aux/git-hooks/pre-push
> @@ -83,4 +83,4 @@ $awk -v origin_name="$1" '
>      # Print every SHA after oldref, up to (and including) newref.
>      system("git rev-list --first-parent --reverse " oldref ".." newref)
>    }
> -' | $awk -v reason=pre-push -f .git/hooks/commit-msg-files.awk
> +' | $awk -v reason=pre-push -f build-aux/git-hooks/commit-msg-files.awk

Btw, I notice that the script falls back to awk if gawk cannot be found.
Maybe in that case, the awk script should be rewritten to not utilize
getline, sub, function, and other features which do not work with Unix
awk?  Or maybe it should try harder to find a POSIX awk?

Thanks.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: build-aux/git-hooks/pre-push
  2023-05-01  6:29 ` build-aux/git-hooks/pre-push Po Lu
  2023-05-01  6:33   ` build-aux/git-hooks/pre-push Po Lu
@ 2023-05-01 16:55   ` Jim Porter
  2023-05-02  0:08     ` build-aux/git-hooks/pre-push Po Lu
  2023-05-04 10:37     ` build-aux/git-hooks/pre-push Basil Contovounesios
  1 sibling, 2 replies; 10+ messages in thread
From: Jim Porter @ 2023-05-01 16:55 UTC (permalink / raw)
  To: Po Lu, emacs-devel

On 4/30/2023 11:29 PM, Po Lu wrote:
> This script apparently loses when pushing from a separate worktree,
> where .git is a file containing the name of the repository the worktree
> was created from.

Thanks for catching this bug.

> The following adjustment seems to fix it.  However, I don't know much
> about git.  Objections?
> 
> diff --git a/build-aux/git-hooks/pre-push b/build-aux/git-hooks/pre-push
> index 8e8277cba4f..8a2866f9d4c 100755
> --- a/build-aux/git-hooks/pre-push
> +++ b/build-aux/git-hooks/pre-push
> @@ -83,4 +83,4 @@ $awk -v origin_name="$1" '
>       # Print every SHA after oldref, up to (and including) newref.
>       system("git rev-list --first-parent --reverse " oldref ".." newref)
>     }
> -' | $awk -v reason=pre-push -f .git/hooks/commit-msg-files.awk
> +' | $awk -v reason=pre-push -f build-aux/git-hooks/commit-msg-files.awk
> 
> 

That won't quite work in general, since it would mean that if you check 
out an old branch, "build-aux/git-hooks/commit-msg-files.awk" won't 
exist, and then the hook will fail. Instead, I pushed a change to 
replace ".git" with "${GIT_DIR:-.git}", which is (as far as I can tell) 
the right way to do this.

(The fallback to ".git" in the expansion is purely defensive, just in 
case there's some old Git version that doesn't set that variable.)



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: build-aux/git-hooks/pre-push
  2023-05-01 16:55   ` build-aux/git-hooks/pre-push Jim Porter
@ 2023-05-02  0:08     ` Po Lu
  2023-05-04 10:37     ` build-aux/git-hooks/pre-push Basil Contovounesios
  1 sibling, 0 replies; 10+ messages in thread
From: Po Lu @ 2023-05-02  0:08 UTC (permalink / raw)
  To: Jim Porter; +Cc: emacs-devel

Jim Porter <jporterbugs@gmail.com> writes:

> On 4/30/2023 11:29 PM, Po Lu wrote:
>> This script apparently loses when pushing from a separate worktree,
>> where .git is a file containing the name of the repository the worktree
>> was created from.
>
> Thanks for catching this bug.
>
>> The following adjustment seems to fix it.  However, I don't know much
>> about git.  Objections?
>> diff --git a/build-aux/git-hooks/pre-push
>> b/build-aux/git-hooks/pre-push
>> index 8e8277cba4f..8a2866f9d4c 100755
>> --- a/build-aux/git-hooks/pre-push
>> +++ b/build-aux/git-hooks/pre-push
>> @@ -83,4 +83,4 @@ $awk -v origin_name="$1" '
>>       # Print every SHA after oldref, up to (and including) newref.
>>       system("git rev-list --first-parent --reverse " oldref ".." newref)
>>     }
>> -' | $awk -v reason=pre-push -f .git/hooks/commit-msg-files.awk
>> +' | $awk -v reason=pre-push -f build-aux/git-hooks/commit-msg-files.awk
>> 
>
> That won't quite work in general, since it would mean that if you
> check out an old branch, "build-aux/git-hooks/commit-msg-files.awk"
> won't exist, and then the hook will fail. Instead, I pushed a change
> to replace ".git" with "${GIT_DIR:-.git}", which is (as far as I can
> tell) the right way to do this.
>
> (The fallback to ".git" in the expansion is purely defensive, just in
> case there's some old Git version that doesn't set that variable.)

Oh, OK.  Thanks!



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: build-aux/git-hooks/pre-push
  2023-05-01  6:33   ` build-aux/git-hooks/pre-push Po Lu
@ 2023-05-02  5:35     ` Jim Porter
  2023-05-02  5:55       ` build-aux/git-hooks/pre-push Po Lu
  0 siblings, 1 reply; 10+ messages in thread
From: Jim Porter @ 2023-05-02  5:35 UTC (permalink / raw)
  To: Po Lu, emacs-devel

On 4/30/2023 11:33 PM, Po Lu wrote:
> Btw, I notice that the script falls back to awk if gawk cannot be found.
> Maybe in that case, the awk script should be rewritten to not utilize
> getline, sub, function, and other features which do not work with Unix
> awk?  Or maybe it should try harder to find a POSIX awk?

I'm not sure the best way to do it, but I think trying to find a POSIX 
awk would be the simplest solution. That awk script isn't *terribly* 
complex, but it uses enough POSIX awk features that I wouldn't want to 
try and make it work with UNIX awk (even if I knew exactly how to do that).



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: build-aux/git-hooks/pre-push
  2023-05-02  5:35     ` build-aux/git-hooks/pre-push Jim Porter
@ 2023-05-02  5:55       ` Po Lu
  0 siblings, 0 replies; 10+ messages in thread
From: Po Lu @ 2023-05-02  5:55 UTC (permalink / raw)
  To: Jim Porter; +Cc: emacs-devel

Jim Porter <jporterbugs@gmail.com> writes:

> On 4/30/2023 11:33 PM, Po Lu wrote:
>> Btw, I notice that the script falls back to awk if gawk cannot be found.
>> Maybe in that case, the awk script should be rewritten to not utilize
>> getline, sub, function, and other features which do not work with Unix
>> awk?  Or maybe it should try harder to find a POSIX awk?
>
> I'm not sure the best way to do it, but I think trying to find a POSIX
> awk would be the simplest solution.

Hmm, ok.  Unfortunately for some reason the most reliable way to do that
I can think of would be to generate the script with Autoconf... and that
leads to a chicken-egg problem, since the hook is installed from
autogen.sh.

Perhaps we could simply look for:

  - /usr/xpg4/bin/awk
  - mawk
  - nawk

in that order, and not run the script at all if a suitable awk can't be
found.

> That awk script isn't *terribly* complex, but it uses enough POSIX awk
> features that I wouldn't want to try and make it work with UNIX awk
> (even if I knew exactly how to do that).

`(autoconf)Limitations of Usual Tools' describes the limitations of Unix
awk.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: build-aux/git-hooks/pre-push
  2023-05-01 16:55   ` build-aux/git-hooks/pre-push Jim Porter
  2023-05-02  0:08     ` build-aux/git-hooks/pre-push Po Lu
@ 2023-05-04 10:37     ` Basil Contovounesios
  2023-05-04 16:28       ` build-aux/git-hooks/pre-push Jim Porter
  1 sibling, 1 reply; 10+ messages in thread
From: Basil Contovounesios @ 2023-05-04 10:37 UTC (permalink / raw)
  To: Jim Porter; +Cc: Po Lu, emacs-devel

Jim Porter [2023-05-01 09:55 -0700] wrote:

> On 4/30/2023 11:29 PM, Po Lu wrote:
>> This script apparently loses when pushing from a separate worktree,
>> where .git is a file containing the name of the repository the worktree
>> was created from.
>
> Thanks for catching this bug.
>
>> The following adjustment seems to fix it.  However, I don't know much
>> about git.  Objections?
>> diff --git a/build-aux/git-hooks/pre-push b/build-aux/git-hooks/pre-push
>> index 8e8277cba4f..8a2866f9d4c 100755
>> --- a/build-aux/git-hooks/pre-push
>> +++ b/build-aux/git-hooks/pre-push
>> @@ -83,4 +83,4 @@ $awk -v origin_name="$1" '
>>       # Print every SHA after oldref, up to (and including) newref.
>>       system("git rev-list --first-parent --reverse " oldref ".." newref)
>>     }
>> -' | $awk -v reason=pre-push -f .git/hooks/commit-msg-files.awk
>> +' | $awk -v reason=pre-push -f build-aux/git-hooks/commit-msg-files.awk
>> 
>
> That won't quite work in general, since it would mean that if you check out an
> old branch, "build-aux/git-hooks/commit-msg-files.awk" won't exist, and then the
> hook will fail. Instead, I pushed a change to replace ".git" with
> "${GIT_DIR:-.git}", which is (as far as I can tell) the right way to do this.
>
> (The fallback to ".git" in the expansion is purely defensive, just in case
> there's some old Git version that doesn't set that variable.)

I have a clone of emacs.git under ~/.local/src/emacs, where the master
branch is checked out under the same name.

Then I have a worktree under ~/.local/src/emacs-29, where the emacs-29
branch is checked out in a branch named wt/emacs-29.

I get the following when I try to push from that worktree:

$ git push upstream wt/emacs-29:emacs-29
gawk: fatal: cannot open source file `/home/blc/.local/src/emacs/.git/worktrees/emacs-29/hooks/commit-msg-files.awk' for reading: No such file or directory
error: failed to push some refs to 'git.savannah.gnu.org:/srv/git/emacs.git'

So maybe we should be defensive about the existence of this hook?
Or am I doing something wrong?

Thanks,

-- 
Basil



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: build-aux/git-hooks/pre-push
  2023-05-04 10:37     ` build-aux/git-hooks/pre-push Basil Contovounesios
@ 2023-05-04 16:28       ` Jim Porter
  2023-05-04 16:42         ` build-aux/git-hooks/pre-push Basil Contovounesios
  0 siblings, 1 reply; 10+ messages in thread
From: Jim Porter @ 2023-05-04 16:28 UTC (permalink / raw)
  To: Basil Contovounesios; +Cc: Po Lu, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 267 bytes --]

On 5/4/2023 3:37 AM, Basil Contovounesios wrote:
> So maybe we should be defensive about the existence of this hook?
> Or am I doing something wrong?

I guess that's what I get for just trusting the Git manual instead of 
verifying that my fix worked. How about this?

[-- Attachment #2: 0001-Fix-post-commit-and-pre-push-hooks-in-worktrees-agai.patch --]
[-- Type: text/plain, Size: 1755 bytes --]

From d3ec68f5e433e5792c1c63672c7b437bb29c5759 Mon Sep 17 00:00:00 2001
From: Jim Porter <jporterbugs@gmail.com>
Date: Thu, 4 May 2023 09:22:40 -0700
Subject: [PATCH] ; Fix post-commit and pre-push hooks in worktrees again

* build-aux/git-hooks/post-commit:
* build-aux/git-hooks/pre-push: Use "$(dirname $0)" to get the hooks
directory.
---
 build-aux/git-hooks/post-commit | 4 +++-
 build-aux/git-hooks/pre-push    | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/build-aux/git-hooks/post-commit b/build-aux/git-hooks/post-commit
index 05f2d778b5c..10f43b539ac 100755
--- a/build-aux/git-hooks/post-commit
+++ b/build-aux/git-hooks/post-commit
@@ -34,6 +34,8 @@
 
 ### Code:
 
+HOOKS_DIR=$(dirname $0)
+
 # Prefer gawk if available, as it handles NUL bytes properly.
 if type gawk >/dev/null 2>&1; then
   awk="gawk"
@@ -42,4 +44,4 @@ else
 fi
 
 git rev-parse HEAD | $awk -v reason=post-commit \
-                          -f ${GIT_DIR:-.git}/hooks/commit-msg-files.awk
+                          -f $HOOKS_DIR/commit-msg-files.awk
diff --git a/build-aux/git-hooks/pre-push b/build-aux/git-hooks/pre-push
index 6ff59102fd7..8d5dde2bbaf 100755
--- a/build-aux/git-hooks/pre-push
+++ b/build-aux/git-hooks/pre-push
@@ -31,6 +31,8 @@
 
 ### Code:
 
+HOOKS_DIR=$(dirname $0)
+
 # Prefer gawk if available, as it handles NUL bytes properly.
 if type gawk >/dev/null 2>&1; then
   awk="gawk"
@@ -83,4 +85,4 @@ $awk -v origin_name="$1" '
     # Print every SHA after oldref, up to (and including) newref.
     system("git rev-list --first-parent --reverse " oldref ".." newref)
   }
-' | $awk -v reason=pre-push -f ${GIT_DIR:-.git}/hooks/commit-msg-files.awk
+' | $awk -v reason=pre-push -f $HOOKS_DIR/commit-msg-files.awk
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: build-aux/git-hooks/pre-push
  2023-05-04 16:28       ` build-aux/git-hooks/pre-push Jim Porter
@ 2023-05-04 16:42         ` Basil Contovounesios
  2023-05-04 16:56           ` build-aux/git-hooks/pre-push Jim Porter
  0 siblings, 1 reply; 10+ messages in thread
From: Basil Contovounesios @ 2023-05-04 16:42 UTC (permalink / raw)
  To: Jim Porter; +Cc: Po Lu, emacs-devel

Jim Porter [2023-05-04 09:28 -0700] wrote:

> How about this?

It allows git-push to succeed in the emacs-29 worktree.
Thanks,

-- 
Basil



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: build-aux/git-hooks/pre-push
  2023-05-04 16:42         ` build-aux/git-hooks/pre-push Basil Contovounesios
@ 2023-05-04 16:56           ` Jim Porter
  0 siblings, 0 replies; 10+ messages in thread
From: Jim Porter @ 2023-05-04 16:56 UTC (permalink / raw)
  To: Basil Contovounesios; +Cc: Po Lu, emacs-devel

On 5/4/2023 9:42 AM, Basil Contovounesios wrote:
> It allows git-push to succeed in the emacs-29 worktree.
> Thanks,

Thanks, pushed to master.



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2023-05-04 16:56 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <875y9cef96.fsf.ref@yahoo.com>
2023-05-01  6:29 ` build-aux/git-hooks/pre-push Po Lu
2023-05-01  6:33   ` build-aux/git-hooks/pre-push Po Lu
2023-05-02  5:35     ` build-aux/git-hooks/pre-push Jim Porter
2023-05-02  5:55       ` build-aux/git-hooks/pre-push Po Lu
2023-05-01 16:55   ` build-aux/git-hooks/pre-push Jim Porter
2023-05-02  0:08     ` build-aux/git-hooks/pre-push Po Lu
2023-05-04 10:37     ` build-aux/git-hooks/pre-push Basil Contovounesios
2023-05-04 16:28       ` build-aux/git-hooks/pre-push Jim Porter
2023-05-04 16:42         ` build-aux/git-hooks/pre-push Basil Contovounesios
2023-05-04 16:56           ` build-aux/git-hooks/pre-push Jim Porter

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.