@@ -68,6 +68,10 @@ class CredentialNotFoundError(SCMError):
6868 """Error occurred while retrieving credentials/no credentials available."""
6969
7070
71+ class CredentialQuitError (SCMError ):
72+ """Credential helper returned quit=1."""
73+
74+
7175class CredentialHelper (ABC ):
7276 """Base git-credential helper."""
7377
@@ -174,6 +178,9 @@ def get(self, credential: "Credential", **kwargs) -> "Credential":
174178 continue
175179 if not credentials :
176180 raise CredentialNotFoundError ("No credentials found" )
181+ quit_ = credentials .get ("quit" )
182+ if quit_ is not None and quit_ .lower () in ("true" , "1" ):
183+ raise CredentialQuitError ("Helper returned quit=1" )
177184 return Credential (** credentials )
178185
179186 def store (self , credential : "Credential" , ** kwargs ):
@@ -539,6 +546,9 @@ def helpers(self) -> List["CredentialHelper"]:
539546
540547 def fill (self , interactive : bool = True ) -> "Credential" :
541548 """Return a new credential with filled username and password."""
549+ if self .username and self .password :
550+ return Credential (** self )
551+
542552 try :
543553 return memory_helper .get (self , interactive = False )
544554 except CredentialNotFoundError :
@@ -549,13 +559,17 @@ def fill(self, interactive: bool = True) -> "Credential":
549559 return helper .get (self )
550560 except CredentialNotFoundError :
551561 continue
562+ except CredentialQuitError as exc :
563+ raise CredentialNotFoundError (
564+ f"No available credentials for '{ self } '"
565+ ) from exc
552566
553567 try :
554568 return memory_helper .get (self , interactive = interactive )
555569 except CredentialNotFoundError :
556570 pass
557571
558- raise CredentialNotFoundError (f"No available credentials for '{ self . url } '" )
572+ raise CredentialNotFoundError (f"No available credentials for '{ self } '" )
559573
560574 def approve (self ):
561575 """Store this credential in available helpers."""
0 commit comments