Use the feed's <name> to generate the archive name
[0compile.git] / setup.py
blob8f51ad138fdaaf1da795aa1a46679eb74dd29851
1 # Copyright (C) 2006, Thomas Leonard
2 # See http://0install.net/0compile.html
4 import sys, os, __main__
5 from logging import info
6 from xml.dom import minidom, XMLNS_NAMESPACE
8 from zeroinstall.injector import model, selections, namespaces
9 from zeroinstall.injector.handler import Handler
10 from zeroinstall.injector.iface_cache import iface_cache
11 from zeroinstall.injector.policy import Policy
12 from zeroinstall import SafeException, helpers
14 from support import *
16 def do_setup(args, get_dir_callback = None):
17 "setup [ SOURCE-URI [ DIR ] ]"
18 if len(args) == 0:
19 assert get_dir_callback is None
20 buildenv = BuildEnv()
21 interface = buildenv.interface
22 assert interface
23 create_dir = None
24 buildenv.get_selections(prompt = True)
25 else:
26 buildenv = BuildEnv(need_config = False)
27 interface = args[0]
28 if get_dir_callback:
29 assert len(args) == 1
30 if len(args) == 1:
31 create_dir = os.path.basename(interface)
32 if create_dir.endswith('.xml'):
33 create_dir = create_dir[:-4]
34 assert '/' not in create_dir
35 assert create_dir is not '.'
36 if get_dir_callback:
37 create_dir = get_dir_callback(create_dir)
38 elif len(args) == 2:
39 create_dir = args[1]
40 if create_dir == '.':
41 create_dir = None
42 else:
43 raise __main__.UsageError()
45 iface_uri = model.canonical_iface_uri(args[0])
46 if iface_uri.startswith('/'):
47 root = qdom.parse(file(iface_uri))
48 if root.uri == namespaces.XMLNS_IFACE and root.name == 'selections':
49 # Looks like this is a selections file, not an interface.
50 buildenv.config.set('compile', 'selections', iface_uri)
51 iface_uri = root.getAttribute('interface')
52 buildenv.config.set('compile', 'interface', iface_uri)
54 if create_dir and os.path.exists(create_dir):
55 raise SafeException("Directory '%s' already exists." % create_dir)
56 buildenv.get_selections()
58 if create_dir:
59 os.mkdir(create_dir)
60 os.chdir(create_dir)
61 print "Created directory %s" % create_dir
63 buildenv.save()
65 __main__.commands.append(do_setup)