@@ -31,6 +31,7 @@ def register_backend(name):
31
31
"""
32
32
Decorator for registering a DataBackend class.
33
33
"""
34
+
34
35
def _wrapper (cls ):
35
36
registry ['data_backends' ][name ] = cls
36
37
return cls
@@ -56,7 +57,6 @@ def fetch(self):
56
57
57
58
@register_backend (DataSourceTypeChoices .LOCAL )
58
59
class LocalBackend (DataBackend ):
59
-
60
60
@contextmanager
61
61
def fetch (self ):
62
62
logger .debug (f"Data source type is local; skipping fetch" )
@@ -71,12 +71,14 @@ class GitBackend(DataBackend):
71
71
'username' : forms .CharField (
72
72
required = False ,
73
73
label = _ ('Username' ),
74
- widget = forms .TextInput (attrs = {'class' : 'form-control' })
74
+ widget = forms .TextInput (attrs = {'class' : 'form-control' }),
75
+ help_text = _ ("Only used for cloning with HTTP / HTTPS" ),
75
76
),
76
77
'password' : forms .CharField (
77
78
required = False ,
78
79
label = _ ('Password' ),
79
- widget = forms .TextInput (attrs = {'class' : 'form-control' })
80
+ widget = forms .TextInput (attrs = {'class' : 'form-control' }),
81
+ help_text = _ ("Only used for cloning with HTTP / HTTPS" ),
80
82
),
81
83
'branch' : forms .CharField (
82
84
required = False ,
@@ -89,21 +91,30 @@ class GitBackend(DataBackend):
89
91
def fetch (self ):
90
92
local_path = tempfile .TemporaryDirectory ()
91
93
92
- username = self .params .get ('username' )
93
- password = self .params .get ('password' )
94
- branch = self .params .get ('branch' )
95
94
config = StackedConfig .default ()
95
+ clone_args = {
96
+ "branch" : self .params .get ('branch' ),
97
+ "config" : config ,
98
+ "depth" : 1 ,
99
+ "errstream" : porcelain .NoneStream (),
100
+ "quiet" : True ,
101
+ }
102
+
103
+ if self .url_scheme in ('http' , 'https' ):
104
+ clone_args .update (
105
+ {
106
+ "username" : self .params .get ('username' ),
107
+ "password" : self .params .get ('password' ),
108
+ }
109
+ )
96
110
97
111
if settings .HTTP_PROXIES and self .url_scheme in ('http' , 'https' ):
98
112
if proxy := settings .HTTP_PROXIES .get (self .url_scheme ):
99
113
config .set ("http" , "proxy" , proxy )
100
114
101
115
logger .debug (f"Cloning git repo: { self .url } " )
102
116
try :
103
- porcelain .clone (
104
- self .url , local_path .name , depth = 1 , branch = branch , username = username , password = password ,
105
- config = config , quiet = True , errstream = porcelain .NoneStream ()
106
- )
117
+ porcelain .clone (self .url , local_path .name , ** clone_args )
107
118
except BaseException as e :
108
119
raise SyncError (f"Fetching remote data failed ({ type (e ).__name__ } ): { e } " )
109
120
0 commit comments