@@ -505,6 +505,7 @@ N_("git rev-parse --parseopt [<options>] -- [<args>...]\n"
505
505
int cmd_rev_parse (int argc , const char * * argv , const char * prefix )
506
506
{
507
507
int i , as_is = 0 , verify = 0 , quiet = 0 , revs_count = 0 , type = 0 ;
508
+ int did_repo_setup = 0 ;
508
509
int has_dashdash = 0 ;
509
510
int output_prefix = 0 ;
510
511
unsigned char sha1 [20 ];
@@ -528,11 +529,40 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
528
529
}
529
530
}
530
531
531
- prefix = setup_git_directory ();
532
- git_config (git_default_config , NULL );
532
+ /* No options; just report on whether we're in a git repo or not. */
533
+ if (argc == 1 ) {
534
+ setup_git_directory ();
535
+ git_config (git_default_config , NULL );
536
+ return 0 ;
537
+ }
538
+
533
539
for (i = 1 ; i < argc ; i ++ ) {
534
540
const char * arg = argv [i ];
535
541
542
+ if (!strcmp (arg , "--local-env-vars" )) {
543
+ int i ;
544
+ for (i = 0 ; local_repo_env [i ]; i ++ )
545
+ printf ("%s\n" , local_repo_env [i ]);
546
+ continue ;
547
+ }
548
+ if (!strcmp (arg , "--resolve-git-dir" )) {
549
+ const char * gitdir = argv [++ i ];
550
+ if (!gitdir )
551
+ die ("--resolve-git-dir requires an argument" );
552
+ gitdir = resolve_gitdir (gitdir );
553
+ if (!gitdir )
554
+ die ("not a gitdir '%s'" , argv [i ]);
555
+ puts (gitdir );
556
+ continue ;
557
+ }
558
+
559
+ /* The rest of the options require a git repository. */
560
+ if (!did_repo_setup ) {
561
+ prefix = setup_git_directory ();
562
+ git_config (git_default_config , NULL );
563
+ did_repo_setup = 1 ;
564
+ }
565
+
536
566
if (!strcmp (arg , "--git-path" )) {
537
567
if (!argv [i + 1 ])
538
568
die ("--git-path requires an argument" );
@@ -706,12 +736,6 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
706
736
add_ref_exclusion (& ref_excludes , arg + 10 );
707
737
continue ;
708
738
}
709
- if (!strcmp (arg , "--local-env-vars" )) {
710
- int i ;
711
- for (i = 0 ; local_repo_env [i ]; i ++ )
712
- printf ("%s\n" , local_repo_env [i ]);
713
- continue ;
714
- }
715
739
if (!strcmp (arg , "--show-toplevel" )) {
716
740
const char * work_tree = get_git_work_tree ();
717
741
if (work_tree )
@@ -767,16 +791,6 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
767
791
puts (prefix_filename (pfx , strlen (pfx ), get_git_common_dir ()));
768
792
continue ;
769
793
}
770
- if (!strcmp (arg , "--resolve-git-dir" )) {
771
- const char * gitdir = argv [++ i ];
772
- if (!gitdir )
773
- die ("--resolve-git-dir requires an argument" );
774
- gitdir = resolve_gitdir (gitdir );
775
- if (!gitdir )
776
- die ("not a gitdir '%s'" , argv [i ]);
777
- puts (gitdir );
778
- continue ;
779
- }
780
794
if (!strcmp (arg , "--is-inside-git-dir" )) {
781
795
printf ("%s\n" , is_inside_git_dir () ? "true"
782
796
: "false" );
0 commit comments