Github messages for voidlinux
 help / color / mirror / Atom feed
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" \

  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).