1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
import os
import sys
import subprocess
from bzrlib import (
bzrdir,
revision as mod_revision,
trace,
transport,
workingtree,
)
from bzrlib import errors as bzr_errors
from bzrlib.plugins.builddeb import (
default_orig_dir,
import_dsc,
upstream,
util,
)
def _get_tree(package_name):
try:
tree = workingtree.WorkingTree.open(".")
except bzr_errors.NotBranchError:
if os.path.exists(package_name):
raise bzr_errors.BzrCommandError("Either run the command from an "
"existing branch of upstream, or move %s aside "
"and a new branch will be created there."
% package_name)
to_transport = transport.get_transport(package_name)
tree = to_transport.ensure_base()
try:
a_bzrdir = bzrdir.BzrDir.open_from_transport(to_transport)
except bzr_errors.NotBranchError:
# really a NotBzrDir error...
create_branch = bzrdir.BzrDir.create_branch_convenience
branch = create_branch(to_transport.base,
possible_transports=[to_transport])
a_bzrdir = branch.bzrdir
else:
if a_bzrdir.has_branch():
raise bzr_errors.AlreadyBranchError(package_name)
branch = a_bzrdir.create_branch()
a_bzrdir.create_workingtree()
try:
tree = a_bzrdir.open_workingtree()
except bzr_errors.NoWorkingTree:
tree = a_bzrdir.create_workingtree()
return tree
def _get_tarball(tree, tarball, package_name, version, use_v3=False):
from bzrlib.plugins.builddeb.repack_tarball import repack_tarball
config = util.debuild_config(tree, tree)
orig_dir = config.orig_dir or default_orig_dir
orig_dir = os.path.join(tree.basedir, orig_dir)
if not os.path.exists(orig_dir):
os.makedirs(orig_dir)
format = None
if use_v3:
if tarball.endswith(".tar.bz2") or tarball.endswith(".tbz2"):
format = "bz2"
dest_name = util.tarball_name(package_name, version, format=format)
tarball_filename = os.path.join(orig_dir, dest_name)
trace.note("Fetching tarball")
repack_tarball(tarball, dest_name, target_dir=orig_dir,
force_gz=not use_v3)
provider = upstream.UpstreamProvider(package_name, "%s-1" % version,
orig_dir, [])
provider.provide(os.path.join(tree.basedir, ".."))
return tarball_filename, util.md5sum_filename(tarball_filename)
def import_upstream(tarball, package_name, version, use_v3=False):
tree = _get_tree(package_name)
if tree.branch.last_revision() != mod_revision.NULL_REVISION:
parents = [tree.branch.last_revision()]
else:
parents = []
tarball_filename, md5sum = _get_tarball(tree, tarball,
package_name, version, use_v3=use_v3)
db = import_dsc.DistributionBranch(tree.branch, tree.branch, tree=tree,
upstream_tree=tree)
dbs = import_dsc.DistributionBranchSet()
dbs.add_branch(db)
db.import_upstream_tarball(tarball_filename, version, parents, md5sum=md5sum)
return tree
def run_dh_make(tree, package_name, version, use_v3=False):
if not tree.has_filename("debian"):
tree.mkdir("debian")
# FIXME: give a nice error on 'debian is not a directory'
if tree.path2id("debian") is None:
tree.add("debian")
if use_v3:
if not tree.has_filename("debian/source"):
tree.mkdir("debian/source")
if tree.path2id("debian/source") is None:
tree.add("debian/source")
f = open("debian/source/format")
try:
f.write("3.0 (quilt)\n")
finally:
f.close()
if tree.path2id("debian/source/format") is None:
tree.add("debian/source/format")
command = ["dh_make", "--addmissing", "--packagename",
"%s_%s" % (package_name, version)]
if getattr(sys.stdin, 'fileno', None) is None:
# running in a test or something
stdin = subprocess.PIPE
input = "s\n\n"
else:
stdin = sys.stdin
input = None
proc = subprocess.Popen(command, cwd=tree.basedir,
preexec_fn=util.subprocess_setup, stdin=stdin)
if input is not None:
proc.stdin.write(input)
proc.stdin.close()
retcode = proc.wait()
if retcode != 0:
raise bzr_errors.BzrCommandError("dh_make failed.")
for fn in os.listdir(tree.abspath("debian")):
if not fn.endswith(".ex") and not fn.endswith(".EX"):
tree.add(os.path.join("debian", fn))
|