5
5
from alibuild_helpers .log import dieOnError
6
6
from alibuild_helpers .workarea import updateReferenceRepos
7
7
8
- from os .path import basename , join
8
+ from os .path import abspath , basename , join
9
9
import os .path as path
10
10
import os
11
11
try :
@@ -17,83 +17,89 @@ def parsePackagesDefinition(pkgname):
17
17
return [ dict (zip (["name" ,"ver" ], y .split ("@" )[0 :2 ]))
18
18
for y in [ x + "@" for x in list (filter (lambda y : y , pkgname .split ("," ))) ] ]
19
19
20
- def doInit (setdir , configDir , pkgname , referenceSources , dist , defaults , dryRun ):
21
- assert (pkgname != None )
22
- assert (type (dist ) == dict )
23
- assert (sorted (dist .keys ()) == ["repo" , "ver" ])
24
- pkgs = parsePackagesDefinition (pkgname )
20
+ def doInit (args ):
21
+ assert (args . pkgname != None )
22
+ assert (type (args . dist ) == dict )
23
+ assert (sorted (args . dist .keys ()) == ["repo" , "ver" ])
24
+ pkgs = parsePackagesDefinition (args . pkgname )
25
25
assert (type (pkgs ) == list )
26
- if dryRun :
26
+ if args . dryRun :
27
27
info ("This will initialise local checkouts for %s\n "
28
28
"--dry-run / -n specified. Doing nothing." % "," .join (x ["name" ] for x in pkgs ))
29
29
exit (0 )
30
30
try :
31
- path .exists (setdir ) or os .mkdir (setdir )
32
- path .exists (referenceSources ) or os .makedirs (referenceSources )
31
+ path .exists (args . develPrefix ) or os .mkdir (args . develPrefix )
32
+ path .exists (args . referenceSources ) or os .makedirs (args . referenceSources )
33
33
except OSError as e :
34
34
error (str (e ))
35
35
exit (1 )
36
36
37
37
# Fetch recipes first if necessary
38
- if path .exists (configDir ):
39
- warning ("using existing recipes from %s" % configDir )
38
+ if path .exists (args . configDir ):
39
+ warning ("using existing recipes from %s" % args . configDir )
40
40
else :
41
41
cmd = format ("git clone %(repo)s%(branch)s %(cd)s" ,
42
- repo = dist ["repo" ] if ":" in dist ["repo" ] else "https://github.com/%s" % dist ["repo" ],
43
- branch = " -b " + dist ["ver" ] if dist ["ver" ] else "" ,
44
- cd = configDir )
42
+ repo = args . dist ["repo" ] if ":" in args . dist ["repo" ] else "https://github.com/%s" % args . dist ["repo" ],
43
+ branch = " -b " + args . dist ["ver" ] if args . dist ["ver" ] else "" ,
44
+ cd = args . configDir )
45
45
debug (cmd )
46
46
err = execute (cmd )
47
47
dieOnError (err != 0 , "cannot clone recipes" )
48
48
49
49
# Use standard functions supporting overrides and taps. Ignore all disables
50
50
# and system packages as they are irrelevant in this context
51
51
specs = {}
52
- defaultsReader = lambda : readDefaults (configDir , defaults , error )
52
+ defaultsReader = lambda : readDefaults (args . configDir , args . defaults , error )
53
53
(err , overrides , taps ) = parseDefaults ([], defaultsReader , debug )
54
54
(_ ,_ ,_ ,validDefaults ) = getPackageList (packages = [ p ["name" ] for p in pkgs ],
55
55
specs = specs ,
56
- configDir = configDir ,
56
+ configDir = args . configDir ,
57
57
preferSystem = False ,
58
58
noSystem = True ,
59
59
architecture = "" ,
60
60
disable = [],
61
- defaults = defaults ,
61
+ defaults = args . defaults ,
62
62
dieOnError = lambda * x , ** y : None ,
63
63
performPreferCheck = lambda * x , ** y : (1 , "" ),
64
64
performRequirementCheck = lambda * x , ** y : (0 , "" ),
65
- performValidateDefaults = lambda spec : validateDefaults (spec , defaults ),
65
+ performValidateDefaults = lambda spec : validateDefaults (spec , args . defaults ),
66
66
overrides = overrides ,
67
67
taps = taps ,
68
68
log = debug )
69
- dieOnError (validDefaults and defaults not in validDefaults ,
70
- "Specified default `%s' is not compatible with the packages you want to build.\n " % defaults +
69
+ dieOnError (validDefaults and args . defaults not in validDefaults ,
70
+ "Specified default `%s' is not compatible with the packages you want to build.\n " % args . defaults +
71
71
"Valid defaults:\n \n - " +
72
72
"\n - " .join (sorted (validDefaults )))
73
73
74
74
for p in pkgs :
75
75
spec = specs .get (p ["name" ])
76
76
dieOnError (spec is None , "cannot find recipe for package %s" % p ["name" ])
77
- dest = join (setdir , spec ["package" ])
77
+ dest = join (args . develPrefix , spec ["package" ])
78
78
writeRepo = spec .get ("write_repo" , spec .get ("source" ))
79
79
dieOnError (not writeRepo , "package %s has no source field and cannot be developed" % spec ["package" ])
80
80
if path .exists (dest ):
81
81
warning ("not cloning %s since it already exists" % spec ["package" ])
82
82
continue
83
83
p ["ver" ] = p ["ver" ] if p ["ver" ] else spec .get ("tag" , spec ["version" ])
84
84
debug ("cloning %s%s for development" % (spec ["package" ], " version " + p ["ver" ] if p ["ver" ] else "" ))
85
- updateReferenceRepos (referenceSources , spec ["package" ], spec )
85
+
86
+ if not args .fetchRepos :
87
+ spec ["reference" ] = path .join (abspath (args .referenceSources ), spec ["package" ].lower ())
88
+
89
+ if args .fetchRepos or not path .exists (spec ["reference" ]):
90
+ updateReferenceRepos (args .referenceSources , spec ["package" ], spec )
91
+
86
92
cmd = format ("git clone %(readRepo)s%(branch)s --reference %(refSource)s %(cd)s && " +
87
93
"cd %(cd)s && git remote set-url --push origin %(writeRepo)s" ,
88
94
readRepo = spec ["source" ],
89
95
writeRepo = writeRepo ,
90
96
branch = " -b " + p ["ver" ] if p ["ver" ] else "" ,
91
- refSource = join (referenceSources , spec ["package" ].lower ()),
97
+ refSource = join (args . referenceSources , spec ["package" ].lower ()),
92
98
cd = dest )
93
99
debug (cmd )
94
100
err = execute (cmd )
95
101
dieOnError (err != 0 , "cannot clone %s%s" %
96
102
(spec ["package" ], " version " + p ["ver" ] if p ["ver" ] else "" ))
97
103
banner (format ("Development directory %(d)s created%(pkgs)s" ,
98
104
pkgs = " for " + ", " .join ([ x ["name" ].lower () for x in pkgs ]) if pkgs else "" ,
99
- d = setdir ))
105
+ d = args . develPrefix ))
0 commit comments