From: Junio C Hamano <gitster@pobox.com>
To: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Cc: git@vger.kernel.org, "Jeff King" <peff@peff.net>,
"Andreas Färber" <andreas.faerber@web.de>,
"Johannes Schindelin" <Johannes.Schindelin@gmx.de>
Subject: Re: [PATCH 1/6] Makefile: symlink the same way under "symlinks" and "no hardlinks"
Date: Mon, 29 Mar 2021 15:17:34 -0700 [thread overview]
Message-ID: <xmqq1rbxiozl.fsf@gitster.g> (raw)
In-Reply-To: <patch-1.7-39926acb0d1-20210329T162327Z-avarab@gmail.com> ("Ævar Arnfjörð Bjarmason"'s message of "Mon, 29 Mar 2021 18:31:39 +0200")
Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
> In particular INSTALL_SYMLINKS=Y will result in a link tree like:
>
> bin/git
> libexec/git -> ../bin/git
> libexec/git-add -> ../bin/git
>
> Whereas NO_INSTALL_HARDLINKS=Y in cases where the "ln" would fail would result in:
>
> bin/git
> libexec/git
> libexec/git-add -> git
>
> I.e. we duplicated the "git" between the bin/ and libexec/
> directories (by default they're hardlinked), and potentially had had
> e.g. "git-add" pointing at the libexec/git hardlink (or more likely if
> "ln" is failing, a copy), instead of the bin/git.
>
> Now we'll instead use the same symlinks to point to the bindir. I
> don't see any reason not to do so, and no breakage related to this has
> been reported with INSTALL_SYMLINKS in all this time. I just did it
> this way to maintain bug-for-bug compatibility at the time.
Makes sense. I do not see a reason why libexec/git-add that points
at ../bin/git would cause problems, either.
> +# Define NO_INSTALL_HARDLINKS if you'd like to have programs in bin/
> +# and libexec/ either symlinked (we try with INSTALL_SYMLINKS first),
> +# or if that fails fall back on a "cp" instead of a "ln". Useful for
> +# when you don't want hardlinks at all.
So without INSTALL_SYMLINKS and with NO_INSTALL_HARDLINKS, the only
remaining choice is "cp". With both set, we favour "ln -s" over
"cp" and do not allow "ln". With INSTALL_SYMLINKS and without
NO_INSTALL_HARDLINKS, we try "ln -s", "ln" and finally "cp". With
neither, we try "ln" and fall back to "cp"?
That precedence order does make sense.
> @@ -3019,33 +3020,30 @@ endif
> } && \
> for p in $(filter $(install_bindir_programs),$(BUILT_INS)); do \
> $(RM) "$$bindir/$$p" && \
> - test -n "$(INSTALL_SYMLINKS)" && \
> + test -n "$(INSTALL_SYMLINKS)" -o "$(NO_INSTALL_HARDLINKS)" && \
I had an impression that we avoid -o/-a used with "test" (instead
we'd use "test && test" or "test || test")?
In either case, if we are told to favor "ln -s", or told not to use
"ln", we try "ln -s"? That does not make much sense to me, though.
What do I need to do if I do not ever want symbolic links? Is it
impossible now?
> ln -s "git$X" "$$bindir/$$p" || \
> { test -z "$(NO_INSTALL_HARDLINKS)" && \
> ln "$$bindir/git$X" "$$bindir/$$p" 2>/dev/null || \
> - ln -s "git$X" "$$bindir/$$p" 2>/dev/null || \
> cp "$$bindir/git$X" "$$bindir/$$p" || exit; }; \
> done && \
> for p in $(BUILT_INS); do \
> $(RM) "$$execdir/$$p" && \
> if test -z "$(SKIP_DASHED_BUILT_INS)"; \
> then \
> - test -n "$(INSTALL_SYMLINKS)" && \
> + test -n "$(INSTALL_SYMLINKS)" -o "$(NO_INSTALL_HARDLINKS)" && \
Perhaps the same comment applies here and to the next hunk, too?
> ln -s "$$destdir_from_execdir_SQ/$(bindir_relative_SQ)/git$X" "$$execdir/$$p" || \
> { test -z "$(NO_INSTALL_HARDLINKS)" && \
> ln "$$execdir/git$X" "$$execdir/$$p" 2>/dev/null || \
> - ln -s "git$X" "$$execdir/$$p" 2>/dev/null || \
> cp "$$execdir/git$X" "$$execdir/$$p" || exit; }; \
> fi \
> done && \
> remote_curl_aliases="$(REMOTE_CURL_ALIASES)" && \
> for p in $$remote_curl_aliases; do \
> $(RM) "$$execdir/$$p" && \
> - test -n "$(INSTALL_SYMLINKS)" && \
> + test -n "$(INSTALL_SYMLINKS)" -o "$(NO_INSTALL_HARDLINKS)" && \
> ln -s "git-remote-http$X" "$$execdir/$$p" || \
> { test -z "$(NO_INSTALL_HARDLINKS)" && \
> ln "$$execdir/git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
> - ln -s "git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
> cp "$$execdir/git-remote-http$X" "$$execdir/$$p" || exit; } \
> done && \
> ./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
next prev parent reply other threads:[~2021-03-29 22:18 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-07 13:20 [PATCH] Makefile: generate 'git' as 'cc [...] -o git+ && mv git+ git' Ævar Arnfjörð Bjarmason
2021-03-07 20:41 ` Junio C Hamano
2021-03-08 12:38 ` Ævar Arnfjörð Bjarmason
2021-03-08 17:21 ` Junio C Hamano
2021-03-08 18:26 ` Jeff King
2021-03-29 16:20 ` [PATCH v2 0/5] Makefile: don't die on AIX with open ./git Ævar Arnfjörð Bjarmason
2021-03-29 16:20 ` [PATCH v2 1/5] Makefile: rename objects in-place, don't clobber Ævar Arnfjörð Bjarmason
2021-03-29 18:21 ` Junio C Hamano
2021-03-29 18:26 ` Junio C Hamano
2021-03-29 23:24 ` Ævar Arnfjörð Bjarmason
2021-03-30 0:21 ` Junio C Hamano
2021-03-31 14:17 ` Ævar Arnfjörð Bjarmason
2021-03-31 18:50 ` Junio C Hamano
2021-03-29 16:20 ` [PATCH v2 2/5] Makefile: rename scripts " Ævar Arnfjörð Bjarmason
2021-03-29 18:40 ` Junio C Hamano
2021-03-29 23:28 ` Ævar Arnfjörð Bjarmason
2021-03-29 16:20 ` [PATCH v2 3/5] Makefile: don't needlessly "rm $@ $@+" before "mv $@+ $@" Ævar Arnfjörð Bjarmason
2021-03-29 18:46 ` Junio C Hamano
2021-03-29 16:20 ` [PATCH v2 4/5] Makefile: add the ".DELETE_ON_ERROR" flag Ævar Arnfjörð Bjarmason
2021-03-29 18:51 ` Junio C Hamano
2021-03-29 23:31 ` Ævar Arnfjörð Bjarmason
2021-03-29 23:58 ` Junio C Hamano
2021-03-30 15:11 ` Jeff King
2021-03-30 18:36 ` Junio C Hamano
2021-03-31 6:58 ` Jeff King
2021-03-31 18:36 ` Junio C Hamano
2021-03-31 22:29 ` Johannes Schindelin
2021-03-29 16:20 ` [PATCH v2 5/5] Makefile: don't "rm configure" before generating it Ævar Arnfjörð Bjarmason
2021-03-29 16:31 ` [PATCH 0/6] Makefile: make non-symlink & non-hardlink install sane Ævar Arnfjörð Bjarmason
2021-03-29 16:31 ` [PATCH 1/6] Makefile: symlink the same way under "symlinks" and "no hardlinks" Ævar Arnfjörð Bjarmason
2021-03-29 22:17 ` Junio C Hamano [this message]
2021-03-29 16:31 ` [PATCH 2/6] Makefile: begin refactoring out "ln || ln -s || cp" pattern Ævar Arnfjörð Bjarmason
2021-03-29 22:20 ` Junio C Hamano
2021-03-29 16:31 ` [PATCH 3/6] Makefile: refactor " Ævar Arnfjörð Bjarmason
2021-03-29 22:24 ` Junio C Hamano
2021-03-30 15:20 ` Jeff King
2021-03-30 18:36 ` Junio C Hamano
2021-03-29 16:31 ` [PATCH 4/6] Makefile: make INSTALL_SYMLINKS affect the build directory Ævar Arnfjörð Bjarmason
2021-03-29 22:31 ` Junio C Hamano
2021-03-31 14:04 ` Ævar Arnfjörð Bjarmason
2021-03-29 16:31 ` [PATCH 5/6] Makefile: use "ln -f" instead of "rm && ln" Ævar Arnfjörð Bjarmason
2021-03-29 22:46 ` Junio C Hamano
2021-03-29 16:31 ` [PATCH 6/6] Makefile: add a INSTALL_FALLBACK_LN_CP mode Ævar Arnfjörð Bjarmason
2021-03-29 22:53 ` Junio C Hamano
2021-03-31 14:03 ` Ævar Arnfjörð Bjarmason
2021-03-31 18:45 ` Junio C Hamano
2021-03-31 19:01 ` Ævar Arnfjörð Bjarmason
2021-03-29 23:08 ` [PATCH 0/6] Makefile: make non-symlink & non-hardlink install sane Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq1rbxiozl.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=andreas.faerber@web.de \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.