5
5
from os .path import isfile
6
6
from os .path import join
7
7
from os .path import samefile
8
- from shlex import quote
9
8
10
9
from .config import Configuration
11
10
from .scm_workdir import Workdir
@@ -39,8 +38,7 @@ def from_potential_worktree(cls, wd):
39
38
wd = os .path .abspath (wd )
40
39
git_dir = join (wd , ".git" )
41
40
real_wd , _ , ret = do_ex (
42
- f"git --git-dir={ quote (git_dir )} rev-parse --show-prefix" ,
43
- wd ,
41
+ ["git" , "--git-dir" , git_dir , "rev-parse" , "--show-prefix" ], wd
44
42
)
45
43
real_wd = real_wd [:- 1 ] # remove the trailing pathsep
46
44
if ret :
@@ -59,35 +57,26 @@ def from_potential_worktree(cls, wd):
59
57
60
58
return cls (real_wd )
61
59
62
- def __init__ (self , * args , ** kwargs ):
63
- super ().__init__ (* args , ** kwargs )
64
- self ._git_dir = join (self .path , ".git" )
60
+ def do_ex_git (self , cmd ):
61
+ return self .do_ex (["git" , "--git-dir" , join (self .path , ".git" )] + cmd )
65
62
66
63
def is_dirty (self ):
67
- out , _ , _ = self .do_ex (
68
- f"git --git-dir={ quote (self ._git_dir )} "
69
- "status --porcelain --untracked-files=no"
70
- )
64
+ out , _ , _ = self .do_ex_git (["status" , "--porcelain" , "--untracked-files=no" ])
71
65
return bool (out )
72
66
73
67
def get_branch (self ):
74
- branch , err , ret = self .do_ex (
75
- f"git --git-dir={ quote (self ._git_dir )} rev-parse --abbrev-ref HEAD"
76
- )
68
+ branch , err , ret = self .do_ex_git (["rev-parse" , "--abbrev-ref" , "HEAD" ])
77
69
if ret :
78
70
trace ("branch err" , branch , err , ret )
79
- branch , err , ret = self .do_ex (
80
- f"git --git-dir={ quote (self ._git_dir )} symbolic-ref --short HEAD"
81
- )
71
+ branch , err , ret = self .do_ex_git (["symbolic-ref" , "--short" , "HEAD" ])
82
72
if ret :
83
73
trace ("branch err (symbolic-ref)" , branch , err , ret )
84
74
branch = None
85
75
return branch
86
76
87
77
def get_head_date (self ):
88
- timestamp , err , ret = self .do_ex (
89
- f"git --git-dir={ quote (self ._git_dir )} -c log.showSignature=false "
90
- "log -n 1 HEAD --format=%cI"
78
+ timestamp , err , ret = self .do_ex_git (
79
+ ["-c" , "log.showSignature=false" , "log" , "-n" , "1" , "HEAD" , "--format=%cI" ]
91
80
)
92
81
if ret :
93
82
trace ("timestamp err" , timestamp , err , ret )
@@ -100,25 +89,24 @@ def get_head_date(self):
100
89
return datetime .strptime (date_part , r"%Y-%m-%d" ).date ()
101
90
102
91
def is_shallow (self ):
103
- return isfile (join (self ._git_dir , "shallow" ))
92
+ return isfile (join (self .path , ".git/ shallow" ))
104
93
105
94
def fetch_shallow (self ):
106
- self .do_ex ( f"git --git-dir= { quote ( self . _git_dir ) } fetch --unshallow" )
95
+ self .do_ex_git ([ " fetch" , " --unshallow"] )
107
96
108
97
def node (self ):
109
- node , _ , ret = self .do_ex (
110
- f"git --git-dir={ quote (self ._git_dir )} rev-parse --verify --quiet HEAD"
111
- )
98
+ node , _ , ret = self .do_ex_git (["rev-parse" , "--verify" , "--quiet" , "HEAD" ])
112
99
if not ret :
113
100
return node [:7 ]
114
101
115
102
def count_all_nodes (self ):
116
- revs , _ , _ = self .do_ex ( f"git --git-dir= { quote ( self . _git_dir ) } rev-list HEAD" )
103
+ revs , _ , _ = self .do_ex_git ([ " rev-list" , " HEAD"] )
117
104
return revs .count ("\n " ) + 1
118
105
119
106
def default_describe (self ):
107
+ git_dir = join (self .path , ".git" )
120
108
return self .do_ex (
121
- DEFAULT_DESCRIBE [:1 ] + ["--git-dir" , self . _git_dir ] + DEFAULT_DESCRIBE [1 :]
109
+ DEFAULT_DESCRIBE [:1 ] + ["--git-dir" , git_dir ] + DEFAULT_DESCRIBE [1 :]
122
110
)
123
111
124
112
0 commit comments