1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import sys
20
21 import apt_pkg
22
23 from daklib.config import Config
24 from daklib.dbconn import DBChange, DBConn, PolicyQueue, PolicyQueueUpload
25 from daklib.policy import UploadCopy
26
27
29 print(
30 """Usage: dak export -q <queue> [options] -a|--all|<source...>
31
32 Export uploads from policy queues, that is the changes files for the given
33 source package and all other files associated with that.
34
35 -a --all export all uploads
36 -c --copy copy files instead of symlinking them
37 -d <directory> target directory to export packages to
38 default: current directory
39 -q <queue> queue to grab uploads from
40 <source> source package name to export
41 """
42 )
43
44
46 if argv is None:
47 argv = sys.argv
48
49 arguments = [
50 ("h", "help", "Export::Options::Help"),
51 ("a", "all", "Export::Options::All"),
52 ("c", "copy", "Export::Options::Copy"),
53 ("d", "directory", "Export::Options::Directory", "HasArg"),
54 ("q", "queue", "Export::Options::Queue", "HasArg"),
55 ]
56
57 cnf = Config()
58 source_names = apt_pkg.parse_commandline(cnf.Cnf, arguments, argv)
59 options = cnf.subtree("Export::Options")
60
61 if "Help" in options or "Queue" not in options:
62 usage()
63 sys.exit(0)
64
65 session = DBConn().session()
66
67 queue = session.query(PolicyQueue).filter_by(queue_name=options["Queue"]).first()
68 if queue is None:
69 print("Unknown queue '{0}'".format(options["Queue"]))
70 sys.exit(1)
71 uploads = session.query(PolicyQueueUpload).filter_by(policy_queue=queue)
72 if "All" not in options:
73 uploads = uploads.filter(DBChange.source.in_(source_names))
74 directory = options.get("Directory", ".")
75 symlink = "Copy" not in options
76
77 for u in uploads:
78 UploadCopy(u).export(directory, symlink=symlink, ignore_existing=True)
79
80
81 if __name__ == "__main__":
82 main()
83