Re: [PATCH 2/2] Makes _do_open2 set _gitdir to actual path

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Feb 3, 2015 at 6:24 AM, Remi Rampin <remirampin@xxxxxxxxx> wrote:
> If _is_git had to follow "gitdir: ..." files to reach the actual Git
> directory, we set _gitdir to that final path.
> ---
>  lib/choose_repository.tcl | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/lib/choose_repository.tcl b/lib/choose_repository.tcl
> index 49ff641..641068d 100644
> --- a/lib/choose_repository.tcl
> +++ b/lib/choose_repository.tcl
> @@ -338,13 +338,17 @@ method _git_init {} {
>         return 1
>  }
>
> -proc _is_git {path} {
> +proc _is_git {path {outdir_var ""}} {
> +       if {$outdir_var ne ""} {
> +               upvar 1 $outdir_var outdir
> +       }
>         if {[file isfile $path]} {
>                 set fp [open $path r]
>                 gets $fp line
>                 close $fp
>                 if {[regexp "^gitdir: (.+)$" $line line link_target]} {
> -                       return [_is_git [file join [file dirname $path] $link_target]]
> +                       set link_target_abs [file join [file dirname $path] $link_target]

At this point link_target_abs is something like
sub/../.git/modules/sub. It might be nice to normalize this with 'git
rev-parse --git-dir' or even just (cd $link_target_abs && pwd). I'm
not sure if tcl has anything built in that could do this kind of
normalization.

> +                       return [_is_git $link_target_abs outdir]
>                 }
>                 return 0
>         }
> @@ -352,12 +356,14 @@ proc _is_git {path} {
>         if {[file exists [file join $path HEAD]]
>          && [file exists [file join $path objects]]
>          && [file exists [file join $path config]]} {
> +               set outdir $path
>                 return 1
>         }
>         if {[is_Cygwin]} {
>                 if {[file exists [file join $path HEAD]]
>                  && [file exists [file join $path objects.lnk]]
>                  && [file exists [file join $path config.lnk]]} {
> +                       set outdir $path
>                         return 1
>                 }
>         }
> @@ -1103,7 +1109,7 @@ method _open_local_path {} {
>  }
>
>  method _do_open2 {} {
> -       if {![_is_git [file join $local_path .git]]} {
> +       if {![_is_git [file join $local_path .git] actualgit]} {
>                 error_popup [mc "Not a Git repository: %s" [file tail $local_path]]
>                 return
>         }
> @@ -1116,7 +1122,7 @@ method _do_open2 {} {
>         }
>
>         _append_recentrepos [pwd]
> -       set ::_gitdir .git
> +       set ::_gitdir $actualgit
>         set ::_prefix {}
>         set done 1
>  }
> --
> 1.9.5.msysgit.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]