@@ -223,7 +223,8 @@ class UrlScm(Scm):
223223 }
224224
225225 def __init__ (self , spec , overrides = [], stripUser = None ,
226- preMirrors = [], fallbackMirrors = [], defaultFileMode = None ):
226+ preMirrors = [], fallbackMirrors = [], defaultFileMode = None ,
227+ onlyExtracted = True ):
227228 super ().__init__ (spec , overrides )
228229 self .__url = spec ["url" ]
229230 self .__digestSha1 = spec .get ("digestSHA1" )
@@ -262,6 +263,7 @@ def __init__(self, spec, overrides=[], stripUser=None,
262263 self .__fallbackMirrorsUrls = spec .get ("fallbackMirrors" )
263264 self .__fallbackMirrorsUpload = spec .get ("__fallbackMirrorsUpload" )
264265 self .__fileMode = spec .get ("fileMode" , 0o600 if defaultFileMode else None )
266+ self .__onlyExtracted = spec .get ("onlyExtracted" , onlyExtracted )
265267
266268 def getProperties (self , isJenkins , pretty = False ):
267269 ret = super ().getProperties (isJenkins )
@@ -282,6 +284,7 @@ def getProperties(self, isJenkins, pretty=False):
282284 'fallbackMirrors' : self .__getFallbackMirrorsUrls (),
283285 '__fallbackMirrorsUpload' : self .__getFallbackMirrorsUpload (),
284286 'fileMode' : dumpMode (self .__fileMode ) if pretty else self .__fileMode ,
287+ 'onlyExtracted' : self .__onlyExtracted ,
285288 })
286289 return ret
287290
@@ -536,9 +539,14 @@ async def switch(self, invoker, oldScm):
536539 return True
537540
538541 async def invoke (self , invoker ):
539- os .makedirs (invoker .joinPath (self .__dir ), exist_ok = True )
540- workspaceFile = os .path .join (self .__dir , self .__fn )
541- destination = invoker .joinPath (self .__dir , self .__fn )
542+ extractors = self .__getExtractors ()
543+ downloadDestination = ""
544+ if extractors and self .__onlyExtracted :
545+ downloadDestination = os .path .join (".." , "_download" , self .__dir )
546+
547+ os .makedirs (invoker .joinPath (self .__dir , downloadDestination ), exist_ok = True )
548+ destination = invoker .joinPath (self .__dir , downloadDestination , self .__fn )
549+ workspaceFile = os .path .join (self .__dir , downloadDestination , self .__fn )
542550
543551 # Download only if necessary
544552 if not self .isDeterministic () or not os .path .isfile (destination ):
@@ -587,8 +595,7 @@ async def invoke(self, invoker):
587595 await self ._put (invoker , workspaceFile , destination , url )
588596
589597 # Run optional extractors
590- extractors = self .__getExtractors ()
591- canary = invoker .joinPath (self .__dir , "." + self .__fn + ".extracted" )
598+ canary = invoker .joinPath (self .__dir , downloadDestination , "." + self .__fn + ".extracted" )
592599 if extractors and isYounger (destination , canary ):
593600 for cmd in extractors :
594601 if shutil .which (cmd [0 ]) is None : continue
@@ -672,7 +679,10 @@ def __getExtractors(self):
672679 strip = [extractor [3 ].format (self .__strip )]
673680 else :
674681 strip = []
675- ret .append ([extractor [1 ]] + [a .format (self .__fn ) for a in extractor [2 ]] + strip )
682+ fileToExtract = self .__fn
683+ if self .__onlyExtracted :
684+ fileToExtract = os .path .join (".." , "_download" , self .__dir , self .__fn )
685+ ret .append ([extractor [1 ]] + [a .format (fileToExtract ) for a in extractor [2 ]] + strip )
676686
677687 if not ret :
678688 raise BuildError ("Extractor does not support 'stripComponents'!" )
0 commit comments