Skip to content

Commit abc0682

Browse files
iveqygitster
authored andcommitted
rev-parse: add option --resolve-git-dir <path>
Check if <path> is a valid git-dir or a valid git-file that points to a valid git-dir. We want tests to be independent from the fact that a git-dir may be a git-file. Thus we changed tests to use this feature. Signed-off-by: Fredrik Gustafsson <[email protected]> Mentored-by: Jens Lehmann <[email protected]> Mentored-by: Heiko Voigt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent e7a85be commit abc0682

File tree

7 files changed

+78
-54
lines changed

7 files changed

+78
-54
lines changed

Documentation/git-rev-parse.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ print a message to stderr and exit with nonzero status.
180180
<args>...::
181181
Flags and parameters to be parsed.
182182

183+
--resolve-git-dir <path>::
184+
Check if <path> is a valid git-dir or a git-file pointing to a valid
185+
git-dir. If <path> is a valid git-dir the resolved path to git-dir will
186+
be printed.
183187

184188
include::revisions.txt[]
185189

builtin/rev-parse.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,14 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
468468
return 0;
469469
}
470470

471+
if (argc > 2 && !strcmp(argv[1], "--resolve-git-dir")) {
472+
const char *gitdir = resolve_gitdir(argv[2]);
473+
if (!gitdir)
474+
die("not a gitdir '%s'", argv[2]);
475+
puts(gitdir);
476+
return 0;
477+
}
478+
471479
if (argc > 1 && !strcmp("-h", argv[1]))
472480
usage(builtin_rev_parse_usage);
473481

cache.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,7 @@ extern char *get_graft_file(void);
436436
extern int set_git_dir(const char *path);
437437
extern const char *get_git_work_tree(void);
438438
extern const char *read_gitfile_gently(const char *path);
439+
extern const char *resolve_gitdir(const char *suspect);
439440
extern void set_git_work_tree(const char *tree);
440441

441442
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"

setup.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,3 +808,10 @@ const char *setup_git_directory(void)
808808
{
809809
return setup_git_directory_gently(NULL);
810810
}
811+
812+
const char *resolve_gitdir(const char *suspect)
813+
{
814+
if (is_git_directory(suspect))
815+
return suspect;
816+
return read_gitfile_gently(suspect);
817+
}

t/t7400-submodule-basic.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -360,10 +360,10 @@ test_expect_success 'update --init' '
360360
git submodule update init > update.out &&
361361
cat update.out &&
362362
test_i18ngrep "not initialized" update.out &&
363-
! test -d init/.git &&
363+
test_must_fail git rev-parse --resolve-git-dir init/.git &&
364364
365365
git submodule update --init init &&
366-
test -d init/.git
366+
git rev-parse --resolve-git-dir init/.git
367367
'
368368

369369
test_expect_success 'do not add files from a submodule' '

t/t7403-submodule-sync.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ test_expect_success '"git submodule sync" should update submodule URLs' '
5656
git pull --no-recurse-submodules &&
5757
git submodule sync
5858
) &&
59-
test -d "$(git config -f super-clone/submodule/.git/config \
60-
remote.origin.url)" &&
59+
test -d "$(cd super-clone/submodule &&
60+
git config remote.origin.url
61+
)" &&
6162
(cd super-clone/submodule &&
6263
git checkout master &&
6364
git pull

t/t7407-submodule-foreach.sh

Lines changed: 53 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -118,28 +118,28 @@ test_expect_success 'use "submodule foreach" to checkout 2nd level submodule' '
118118
git clone super clone2 &&
119119
(
120120
cd clone2 &&
121-
test ! -d sub1/.git &&
122-
test ! -d sub2/.git &&
123-
test ! -d sub3/.git &&
124-
test ! -d nested1/.git &&
121+
test_must_fail git rev-parse --resolve-git-dir sub1/.git &&
122+
test_must_fail git rev-parse --resolve-git-dir sub2/.git &&
123+
test_must_fail git rev-parse --resolve-git-dir sub3/.git &&
124+
test_must_fail git rev-parse --resolve-git-dir nested1/.git &&
125125
git submodule update --init &&
126-
test -d sub1/.git &&
127-
test -d sub2/.git &&
128-
test -d sub3/.git &&
129-
test -d nested1/.git &&
130-
test ! -d nested1/nested2/.git &&
126+
git rev-parse --resolve-git-dir sub1/.git &&
127+
git rev-parse --resolve-git-dir sub2/.git &&
128+
git rev-parse --resolve-git-dir sub3/.git &&
129+
git rev-parse --resolve-git-dir nested1/.git &&
130+
test_must_fail git rev-parse --resolve-git-dir nested1/nested2/.git &&
131131
git submodule foreach "git submodule update --init" &&
132-
test -d nested1/nested2/.git &&
133-
test ! -d nested1/nested2/nested3/.git
132+
git rev-parse --resolve-git-dir nested1/nested1/nested2/.git
133+
test_must_fail git rev-parse --resolve-git-dir nested1/nested2/nested3/.git
134134
)
135135
'
136136

137137
test_expect_success 'use "foreach --recursive" to checkout all submodules' '
138138
(
139139
cd clone2 &&
140140
git submodule foreach --recursive "git submodule update --init" &&
141-
test -d nested1/nested2/nested3/.git &&
142-
test -d nested1/nested2/nested3/submodule/.git
141+
git rev-parse --resolve-git-dir nested1/nested2/nested3/.git &&
142+
git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git
143143
)
144144
'
145145

@@ -183,18 +183,18 @@ test_expect_success 'use "update --recursive" to checkout all submodules' '
183183
git clone super clone3 &&
184184
(
185185
cd clone3 &&
186-
test ! -d sub1/.git &&
187-
test ! -d sub2/.git &&
188-
test ! -d sub3/.git &&
189-
test ! -d nested1/.git &&
186+
test_must_fail git rev-parse --resolve-git-dir sub1/.git &&
187+
test_must_fail git rev-parse --resolve-git-dir sub2/.git &&
188+
test_must_fail git rev-parse --resolve-git-dir sub3/.git &&
189+
test_must_fail git rev-parse --resolve-git-dir nested1/.git &&
190190
git submodule update --init --recursive &&
191-
test -d sub1/.git &&
192-
test -d sub2/.git &&
193-
test -d sub3/.git &&
194-
test -d nested1/.git &&
195-
test -d nested1/nested2/.git &&
196-
test -d nested1/nested2/nested3/.git &&
197-
test -d nested1/nested2/nested3/submodule/.git
191+
git rev-parse --resolve-git-dir sub1/.git &&
192+
git rev-parse --resolve-git-dir sub2/.git &&
193+
git rev-parse --resolve-git-dir sub3/.git &&
194+
git rev-parse --resolve-git-dir nested1/.git &&
195+
git rev-parse --resolve-git-dir nested1/nested2/.git &&
196+
git rev-parse --resolve-git-dir nested1/nested2/nested3/.git &&
197+
git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git
198198
)
199199
'
200200

@@ -247,48 +247,51 @@ test_expect_success 'ensure "status --cached --recursive" preserves the --cached
247247

248248
test_expect_success 'use "git clone --recursive" to checkout all submodules' '
249249
git clone --recursive super clone4 &&
250-
test -d clone4/.git &&
251-
test -d clone4/sub1/.git &&
252-
test -d clone4/sub2/.git &&
253-
test -d clone4/sub3/.git &&
254-
test -d clone4/nested1/.git &&
255-
test -d clone4/nested1/nested2/.git &&
256-
test -d clone4/nested1/nested2/nested3/.git &&
257-
test -d clone4/nested1/nested2/nested3/submodule/.git
250+
(
251+
cd clone4 &&
252+
git rev-parse --resolve-git-dir .git &&
253+
git rev-parse --resolve-git-dir sub1/.git &&
254+
git rev-parse --resolve-git-dir sub2/.git &&
255+
git rev-parse --resolve-git-dir sub3/.git &&
256+
git rev-parse --resolve-git-dir nested1/.git &&
257+
git rev-parse --resolve-git-dir nested1/nested2/.git &&
258+
git rev-parse --resolve-git-dir nested1/nested2/nested3/.git &&
259+
git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git
260+
)
258261
'
259262

260263
test_expect_success 'test "update --recursive" with a flag with spaces' '
261264
git clone super "common objects" &&
262265
git clone super clone5 &&
263266
(
264267
cd clone5 &&
265-
test ! -d nested1/.git &&
268+
test_must_fail git rev-parse --resolve-git-dir d nested1/.git &&
266269
git submodule update --init --recursive --reference="$(dirname "$PWD")/common objects" &&
267-
test -d nested1/.git &&
268-
test -d nested1/nested2/.git &&
269-
test -d nested1/nested2/nested3/.git &&
270-
test -f nested1/.git/objects/info/alternates &&
271-
test -f nested1/nested2/.git/objects/info/alternates &&
272-
test -f nested1/nested2/nested3/.git/objects/info/alternates
270+
git rev-parse --resolve-git-dir nested1/.git &&
271+
git rev-parse --resolve-git-dir nested1/nested2/.git &&
272+
git rev-parse --resolve-git-dir nested1/nested2/nested3/.git &&
273+
test -f .git/modules/nested1/objects/info/alternates &&
274+
test -f .git/modules/nested1/modules/nested2/objects/info/alternates &&
275+
test -f .git/modules/nested1/modules/nested2/modules/nested3/objects/info/alternates
273276
)
274277
'
275278

276279
test_expect_success 'use "update --recursive nested1" to checkout all submodules rooted in nested1' '
277280
git clone super clone6 &&
278281
(
279282
cd clone6 &&
280-
test ! -d sub1/.git &&
281-
test ! -d sub2/.git &&
282-
test ! -d sub3/.git &&
283-
test ! -d nested1/.git &&
283+
test_must_fail git rev-parse --resolve-git-dir sub1/.git &&
284+
test_must_fail git rev-parse --resolve-git-dir sub2/.git &&
285+
test_must_fail git rev-parse --resolve-git-dir sub3/.git &&
286+
test_must_fail git rev-parse --resolve-git-dir nested1/.git &&
284287
git submodule update --init --recursive -- nested1 &&
285-
test ! -d sub1/.git &&
286-
test ! -d sub2/.git &&
287-
test ! -d sub3/.git &&
288-
test -d nested1/.git &&
289-
test -d nested1/nested2/.git &&
290-
test -d nested1/nested2/nested3/.git &&
291-
test -d nested1/nested2/nested3/submodule/.git
288+
test_must_fail git rev-parse --resolve-git-dir sub1/.git &&
289+
test_must_fail git rev-parse --resolve-git-dir sub2/.git &&
290+
test_must_fail git rev-parse --resolve-git-dir sub3/.git &&
291+
git rev-parse --resolve-git-dir nested1/.git &&
292+
git rev-parse --resolve-git-dir nested1/nested2/.git &&
293+
git rev-parse --resolve-git-dir nested1/nested2/nested3/.git &&
294+
git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git
292295
)
293296
'
294297

0 commit comments

Comments
 (0)