Skip to content

Commit 31d235c

Browse files
committed
git-gui: fix use of GIT_CEILING_DIRECTORIES
The GIT-VERSION-GEN script sets up GIT_CEILING_DIRECTORIES so that we won't accidentally parse version information from an unrelated parent repository. The ceiling is derived from the source directory by simply appendign "/.." to it, which mean that we'll only consider the current directory for repository discovery. This works alright in the case where git-gui is built as a standalone project, but it breaks when git-gui is embedded into a _related_ parent project. This is for example how git-gui is distributed via Git. Interestingly enough, the version information is still derived properly when building git-gui via Git's Makefile. In that case we eventually end up specifying the ceiling directory as "./.." as we use relative paths there, and that seems to not restrict the repository discovery. But when building via Meson we specify the source directory as an absolute path, and if so the repository discovery _is_ stopped. The consequence is that we won't be able to derive the version in that case. Fix the issue by adding a new optional parameter to GIT-VERSION-GEN that allows the caller to override the parent project directory and wire up new build options for Meson and Make that allows users to specify it. Note that by default we won't set the parent project directory. This isn't required for Meson anyway as we already use absolute paths there, but for our Makefile it means that we still end up with "./.." as ceiling directory, which is ineffective. But using e.g. pwd(1) as the default value would break downstream's version generation, unless we updated git-gui and the Makefile at the same point in time. Signed-off-by: Patrick Steinhardt <ps@pks.im>
1 parent 1a729cc commit 31d235c

4 files changed

Lines changed: 16 additions & 5 deletions

File tree

GIT-VERSION-GEN

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,27 @@ DEF_VER=0.21.GITGUI
55
LF='
66
'
77

8-
if test "$#" -ne 2
8+
if test "$#" -lt 2
99
then
10-
echo >&2 "usage: $0 <SOURCE_DIR> <OUTPUT>"
10+
echo >&2 "usage: $0 <SOURCE_DIR> <OUTPUT> [<PARENT_PROJECT_DIR>]"
1111
exit 1
1212
fi
1313

1414
SOURCE_DIR="$1"
1515
OUTPUT="$2"
16+
PARENT_PROJECT_DIR="$3"
1617

1718
# Protect us from reading Git version information outside of the Git directory
1819
# in case it is not a repository itself, but embedded in an unrelated
19-
# repository.
20-
GIT_CEILING_DIRECTORIES="$SOURCE_DIR/.."
20+
# repository. The PARENT_PROJECT_DIR variable can be used to override this, for
21+
# example when git-gui is included as a subproject.
22+
if test -n "$PARENT_PROJECT_DIR"
23+
then
24+
GIT_CEILING_DIRECTORIES="$PARENT_PROJECT_DIR/.."
25+
else
26+
GIT_CEILING_DIRECTORIES="$SOURCE_DIR/.."
27+
fi
28+
2129
export GIT_CEILING_DIRECTORIES
2230

2331
tree_search ()

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ all::
99
#
1010

1111
GIT-VERSION-FILE: FORCE
12-
@$(SHELL_PATH) ./GIT-VERSION-GEN . $@
12+
@$(SHELL_PATH) ./GIT-VERSION-GEN . $@ "$(PARENT_PROJECT_DIR)"
1313

1414
uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
1515
uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not')

meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ version_file = custom_target(
3434
'@INPUT@',
3535
meson.current_source_dir(),
3636
'@OUTPUT@',
37+
get_option('parent_project_dir'),
3738
],
3839
build_always_stale: true,
3940
)

meson_options.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
option('parent_project_dir', type: 'string', value: '',
2+
description: 'The directory of the parent project. This is used so that the version can be determined even in case git-gui is included as a subtree.')

0 commit comments

Comments
 (0)