From: sgn <sgn@users.noreply.github.com>
To: ml@inbox.vuxu.org
Subject: Re: [PR PATCH] [Updated] [RFC] Support git worktree
Date: Tue, 19 May 2020 14:26:40 +0200 [thread overview]
Message-ID: <20200519122640.JVrw4_LVe3-tOzMGHXoZpcYipcD9qLGJtAUDWZD9V8g@z> (raw)
In-Reply-To: <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-21207@inbox.vuxu.org>
[-- Attachment #1: Type: text/plain, Size: 417 bytes --]
There is an updated pull request by sgn against master on the void-packages repository
https://github.com/sgn/void-packages support-git-worktree
https://github.com/void-linux/void-packages/pull/21207
[RFC] Support git worktree
My effort to address #20393
~This PR haven't set `XBPS_REPOSITORY` to correct branch yet.~
A patch file from https://github.com/void-linux/void-packages/pull/21207.patch is attached
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-support-git-worktree-21207.patch --]
[-- Type: text/x-diff, Size: 10236 bytes --]
From 11e89fb9c97182b1e8c444390ef056345168c69c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
<congdanhqx+sgn@gmail.com>
Date: Wed, 22 Apr 2020 20:59:26 +0700
Subject: [PATCH 1/4] xbps-src: use $XBPS_GIT_CMD for git
---
common/environment/setup/git.sh | 18 ++++++++----------
.../hooks/post-install/05-generate-gitrevs.sh | 12 ++++--------
xbps-src | 5 ++---
3 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/common/environment/setup/git.sh b/common/environment/setup/git.sh
index 870fa984e05..a2f7f0a28ee 100644
--- a/common/environment/setup/git.sh
+++ b/common/environment/setup/git.sh
@@ -1,19 +1,17 @@
# If XBPS_USE_BUILD_MTIME is enabled in conf file don't continue.
# only run this, if SOURCE_DATE_EPOCH isn't set.
+
+if [ -z "$XBPS_GIT_CMD" ]; then
+ msg_error "BUG: environment/setup: XBPS_GIT_CMD is not set\n"
+fi
+
if [ -n "$XBPS_USE_BUILD_MTIME" ]; then
unset SOURCE_DATE_EPOCH
- return 0
-fi
-if [ -z "${SOURCE_DATE_EPOCH}" -a -n "$IN_CHROOT" ]; then
- if command -v chroot-git &>/dev/null; then
- GIT_CMD=$(command -v chroot-git)
- elif command -v git &>/dev/null; then
- GIT_CMD=$(command -v git)
- fi
+elif [ -z "${SOURCE_DATE_EPOCH}" -a -n "$IN_CHROOT" ]; then
# check if the template is under version control:
- if $GIT_CMD -C ${XBPS_SRCPKGDIR}/${basepkg} status -u normal --porcelain template | grep "^?? " &> /dev/null; then
+ if $XBPS_GIT_CMD -C ${XBPS_SRCPKGDIR}/${basepkg} status -u normal --porcelain template | grep "^?? " &> /dev/null; then
export SOURCE_DATE_EPOCH="$(stat -c %Y ${XBPS_SRCPKGDIR}/${basepkg}/template)"
else
- export SOURCE_DATE_EPOCH="$($GIT_CMD -C ${XBPS_DISTDIR} log --pretty='%ct' -n1 HEAD)"
+ export SOURCE_DATE_EPOCH="$($XBPS_GIT_CMD -C ${XBPS_DISTDIR} log --pretty='%ct' -n1 HEAD)"
fi
fi
diff --git a/common/hooks/post-install/05-generate-gitrevs.sh b/common/hooks/post-install/05-generate-gitrevs.sh
index 82b2ab1a786..754ba8865b9 100644
--- a/common/hooks/post-install/05-generate-gitrevs.sh
+++ b/common/hooks/post-install/05-generate-gitrevs.sh
@@ -3,7 +3,7 @@
hook() {
local GITREVS_FILE=${XBPS_STATEDIR}/gitrev
- local GIT_CMD rev
+ local rev
# If XBPS_USE_GIT_REVS is disabled in conf file don't continue.
if [ -z $XBPS_USE_GIT_REVS ]; then
@@ -14,16 +14,12 @@ hook() {
return
fi
- if command -v chroot-git &>/dev/null; then
- GIT_CMD=$(command -v chroot-git)
- elif command -v git &>/dev/null; then
- GIT_CMD=$(command -v git)
- else
- msg_error "$pkgver: cannot find chroot-git or git utility, exiting...\n"
+ if [ -z "$XBPS_GIT_CMD" ]; then
+ msg_error "BUG: post-install: XBPS_GIT_CMD is not set\n"
fi
cd $XBPS_SRCPKGDIR
- rev="$($GIT_CMD rev-parse --short HEAD)"
+ rev="$($XBPS_GIT_CMD rev-parse --short HEAD)"
echo "${sourcepkg}:${rev}"
echo "${sourcepkg}:${rev}" > $GITREVS_FILE
}
diff --git a/xbps-src b/xbps-src
index 888bc3c474a..5eeb3045e35 100755
--- a/xbps-src
+++ b/xbps-src
@@ -502,14 +502,13 @@ fi
# Try using chroot-git then git from the host system
if command -v chroot-git &>/dev/null; then
- XBPS_GIT_CMD=$(command -v chroot-git)
+ export XBPS_GIT_CMD=$(command -v chroot-git)
elif command -v git &>/dev/null; then
- XBPS_GIT_CMD=$(command -v git)
+ export XBPS_GIT_CMD=$(command -v git)
else
echo "neither chroot-git or git are available in your system!" 1>&2
exit 1
fi
-readonly XBPS_GIT_CMD
if [ -n "$XBPS_HOSTDIR" ]; then
export XBPS_REPOSITORY=$XBPS_HOSTDIR/binpkgs
From 0b0d555edf7841ecce7a69a372958db5755e5399 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
<congdanhqx+sgn@gmail.com>
Date: Mon, 20 Apr 2020 23:18:14 +0700
Subject: [PATCH 2/4] setup/git.sh: prefer git plumbing command
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
git-ls-files(1) is plumbing command, its output will never change
regardless of configuration, version.
git-status(1) output will be changed depends on configuration.
At least, 986d4dbc7d (common/environment/setup/git.sh: ensure untracked
files are checked., 2017-11-24) was added to address a different output
on `status.showUntrackedFiles`.
By doing this, also reduce a pipe, and a fork-exec.
Technically, git-log(1) is also a porcelain, but I _think_ `%ct` is
stable enough to stay there. If the day has come, that `git-log(1)` can
be replaced with:
git cat-file commit HEAD |
sed -ne '/^committer/{s/.* \([0-9]*\) [-+][0-9][0-9][0-9][0-9]$/\1/p;q}'
---
common/environment/setup/git.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/environment/setup/git.sh b/common/environment/setup/git.sh
index a2f7f0a28ee..a7395ef53f3 100644
--- a/common/environment/setup/git.sh
+++ b/common/environment/setup/git.sh
@@ -9,7 +9,7 @@ if [ -n "$XBPS_USE_BUILD_MTIME" ]; then
unset SOURCE_DATE_EPOCH
elif [ -z "${SOURCE_DATE_EPOCH}" -a -n "$IN_CHROOT" ]; then
# check if the template is under version control:
- if $XBPS_GIT_CMD -C ${XBPS_SRCPKGDIR}/${basepkg} status -u normal --porcelain template | grep "^?? " &> /dev/null; then
+ if [ -z "$($XBPS_GIT_CMD -C ${XBPS_SRCPKGDIR}/${basepkg} ls-files template)" ]; then
export SOURCE_DATE_EPOCH="$(stat -c %Y ${XBPS_SRCPKGDIR}/${basepkg}/template)"
else
export SOURCE_DATE_EPOCH="$($XBPS_GIT_CMD -C ${XBPS_DISTDIR} log --pretty='%ct' -n1 HEAD)"
From 1162f735a5f32be7e9bece95c7fefa4fa316234d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
<congdanhqx+sgn@gmail.com>
Date: Tue, 21 Apr 2020 00:14:49 +0700
Subject: [PATCH 3/4] setup: export SOURCE_DATE_EPOCH from outside of chroot
git-worktree(1), and Git shared repository can use a plain text file
named `.git` at the root of working tree, containing `gitdir: <path>` to
point to the real directory that has repository.
See: gitrepository-layout(5).
But, that directory is usually inaccessible inside chroot.
In order to support git-worktree(1) and Git shared repository, compute
SOURCE_DATE_EPOCH from outside of chroot, and the chroot will carry it
over to inside chroot.
I've only tested again xbps-uunshare(1).
---
common/environment/setup/git.sh | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/common/environment/setup/git.sh b/common/environment/setup/git.sh
index a7395ef53f3..5f9b157a895 100644
--- a/common/environment/setup/git.sh
+++ b/common/environment/setup/git.sh
@@ -7,9 +7,12 @@ fi
if [ -n "$XBPS_USE_BUILD_MTIME" ]; then
unset SOURCE_DATE_EPOCH
-elif [ -z "${SOURCE_DATE_EPOCH}" -a -n "$IN_CHROOT" ]; then
+elif [ -z "${SOURCE_DATE_EPOCH}" ]; then
+ if [ -n "$IN_CHROOT" ]; then
+ msg_error "xbps-src's BUG: SOURCE_DATE_EPOCH is undefined\n"
+ fi
# check if the template is under version control:
- if [ -z "$($XBPS_GIT_CMD -C ${XBPS_SRCPKGDIR}/${basepkg} ls-files template)" ]; then
+ if [ -n "$basepkg" -a -z "$($XBPS_GIT_CMD -C ${XBPS_SRCPKGDIR}/${basepkg} ls-files template)" ]; then
export SOURCE_DATE_EPOCH="$(stat -c %Y ${XBPS_SRCPKGDIR}/${basepkg}/template)"
else
export SOURCE_DATE_EPOCH="$($XBPS_GIT_CMD -C ${XBPS_DISTDIR} log --pretty='%ct' -n1 HEAD)"
From 41306a3c59c922dd5174c8ec63423826755855c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
<congdanhqx+sgn@gmail.com>
Date: Tue, 21 Apr 2020 22:52:38 +0700
Subject: [PATCH 4/4] setup: compute gitrev from outside of chroot
Together with previous commit, `xbps-src` is able to support
git-worktree and shared repository by now.
---
common/environment/setup/git.sh | 12 ++++++++++++
common/hooks/post-install/05-generate-gitrevs.sh | 10 ++++------
common/xbps-src/shutils/chroot.sh | 1 +
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/common/environment/setup/git.sh b/common/environment/setup/git.sh
index 5f9b157a895..13e5178ccff 100644
--- a/common/environment/setup/git.sh
+++ b/common/environment/setup/git.sh
@@ -18,3 +18,15 @@ elif [ -z "${SOURCE_DATE_EPOCH}" ]; then
export SOURCE_DATE_EPOCH="$($XBPS_GIT_CMD -C ${XBPS_DISTDIR} log --pretty='%ct' -n1 HEAD)"
fi
fi
+
+# if XBPS_USE_GIT_REVS is enabled in conf file,
+# compute XBPS_GIT_REVS to use in pkg hooks
+if [ -z "$XBPS_USE_GIT_REVS" ]; then
+ unset XBPS_GIT_REVS
+elif [ -z "$XBPS_GIT_REVS" ]; then
+ if [ -n "$IN_CHROOT" ]; then
+ msg_error "xbps-src's BUG: XBPS_GIT_REVS is undefined\n"
+ else
+ export XBPS_GIT_REVS="$($XBPS_GIT_CMD -C "${XBPS_DISTDIR}" rev-parse --verify --short HEAD)"
+ fi
+fi
diff --git a/common/hooks/post-install/05-generate-gitrevs.sh b/common/hooks/post-install/05-generate-gitrevs.sh
index 754ba8865b9..c5a51f0d101 100644
--- a/common/hooks/post-install/05-generate-gitrevs.sh
+++ b/common/hooks/post-install/05-generate-gitrevs.sh
@@ -3,7 +3,6 @@
hook() {
local GITREVS_FILE=${XBPS_STATEDIR}/gitrev
- local rev
# If XBPS_USE_GIT_REVS is disabled in conf file don't continue.
if [ -z $XBPS_USE_GIT_REVS ]; then
@@ -14,12 +13,11 @@ hook() {
return
fi
- if [ -z "$XBPS_GIT_CMD" ]; then
- msg_error "BUG: post-install: XBPS_GIT_CMD is not set\n"
+ if [ -z "$XBPS_GIT_REVS" ]; then
+ msg_error "BUG: XBPS_GIT_REVS is not set\n"
fi
cd $XBPS_SRCPKGDIR
- rev="$($XBPS_GIT_CMD rev-parse --short HEAD)"
- echo "${sourcepkg}:${rev}"
- echo "${sourcepkg}:${rev}" > $GITREVS_FILE
+ echo "${sourcepkg}:${XBPS_GIT_REVS}"
+ echo "${sourcepkg}:${XBPS_GIT_REVS}" > $GITREVS_FILE
}
diff --git a/common/xbps-src/shutils/chroot.sh b/common/xbps-src/shutils/chroot.sh
index 1298952fd40..436f8866cd4 100644
--- a/common/xbps-src/shutils/chroot.sh
+++ b/common/xbps-src/shutils/chroot.sh
@@ -175,6 +175,7 @@ chroot_handler() {
${HTTP_PROXY_AUTH:+HTTP_PROXY_AUTH="${HTTP_PROXY_AUTH}"} \
${FTP_RETRIES:+FTP_RETRIES="${FTP_RETRIES}"} \
SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
+ XBPS_GIT_REVS="$XBPS_GIT_REVS" \
XBPS_ALLOW_CHROOT_BREAKOUT="$XBPS_ALLOW_CHROOT_BREAKOUT" \
$XBPS_COMMONDIR/chroot-style/${XBPS_CHROOT_CMD:=uunshare}.sh \
$XBPS_MASTERDIR $XBPS_DISTDIR "$XBPS_HOSTDIR" "$XBPS_CHROOT_CMD_ARGS" \
next prev parent reply other threads:[~2020-05-19 12:26 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-21 16:25 [PR PATCH] " sgn
2020-04-21 16:43 ` xtraeme
2020-04-22 0:01 ` sgn
2020-04-22 0:44 ` sgn
2020-04-22 0:49 ` [PR PATCH] [Updated] " sgn
2020-04-22 0:51 ` sgn
2020-04-22 0:51 ` sgn
2020-04-22 15:07 ` [PR PATCH] [Updated] " sgn
2020-04-22 16:00 ` sgn
2020-04-22 16:14 ` sgn
2020-04-22 16:15 ` sgn
2020-04-22 16:28 ` sgn
2020-04-22 16:30 ` sgn
2020-04-22 16:41 ` Piraty
2020-04-26 1:19 ` [PR PATCH] [Updated] " sgn
2020-04-26 1:20 ` sgn
2020-04-26 7:53 ` Piraty
2020-05-18 11:49 ` [PR PATCH] [Updated] " sgn
2020-05-19 12:26 ` sgn [this message]
2020-05-19 13:19 ` sgn
2020-05-23 6:59 ` [PR PATCH] [Merged]: " sgn
2020-05-23 12:25 ` Piraty
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=20200519122640.JVrw4_LVe3-tOzMGHXoZpcYipcD9qLGJtAUDWZD9V8g@z \
--to=sgn@users.noreply.github.com \
--cc=ml@inbox.vuxu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).