Statistics
| Branch: | Tag: | Revision:

root / devflow / autopkg.py @ 1296e42b

History | View | Annotate | Download (12.5 kB)

1 8df4ab84 Vangelis Koukis
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
2 55775645 Vangelis Koukis
#
3 55775645 Vangelis Koukis
# Redistribution and use in source and binary forms, with or
4 55775645 Vangelis Koukis
# without modification, are permitted provided that the following
5 55775645 Vangelis Koukis
# conditions are met:
6 55775645 Vangelis Koukis
#
7 55775645 Vangelis Koukis
#   1. Redistributions of source code must retain the above
8 55775645 Vangelis Koukis
#      copyright notice, this list of conditions and the following
9 55775645 Vangelis Koukis
#      disclaimer.
10 55775645 Vangelis Koukis
#
11 55775645 Vangelis Koukis
#   2. Redistributions in binary form must reproduce the above
12 55775645 Vangelis Koukis
#      copyright notice, this list of conditions and the following
13 55775645 Vangelis Koukis
#      disclaimer in the documentation and/or other materials
14 55775645 Vangelis Koukis
#      provided with the distribution.
15 55775645 Vangelis Koukis
#
16 55775645 Vangelis Koukis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 55775645 Vangelis Koukis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 55775645 Vangelis Koukis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 55775645 Vangelis Koukis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 55775645 Vangelis Koukis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 55775645 Vangelis Koukis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 55775645 Vangelis Koukis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 55775645 Vangelis Koukis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 55775645 Vangelis Koukis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 55775645 Vangelis Koukis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 55775645 Vangelis Koukis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 55775645 Vangelis Koukis
# POSSIBILITY OF SUCH DAMAGE.
28 55775645 Vangelis Koukis
#
29 55775645 Vangelis Koukis
# The views and conclusions contained in the software and
30 55775645 Vangelis Koukis
# documentation are those of the authors and should not be
31 55775645 Vangelis Koukis
# interpreted as representing official policies, either expressed
32 55775645 Vangelis Koukis
# or implied, of GRNET S.A.
33 55775645 Vangelis Koukis
34 4a45f70c Christos Stavrakakis
"""Helper script for automatic build of debian packages."""
35 4a45f70c Christos Stavrakakis
36 55775645 Vangelis Koukis
import os
37 55775645 Vangelis Koukis
import sys
38 18be409c Christos Stavrakakis
39 18be409c Christos Stavrakakis
from git import GitCommandError
40 55775645 Vangelis Koukis
from optparse import OptionParser
41 4a45f70c Christos Stavrakakis
from sh import mktemp, cd, rm, git_dch  # pylint: disable=E0611
42 55775645 Vangelis Koukis
43 e727d1ba Christos Stavrakakis
from devflow import versioning
44 9fe1ecd8 Christos Stavrakakis
from devflow import utils
45 c181882a Christos Stavrakakis
from devflow import BRANCH_TYPES
46 866bb9c1 Christos Stavrakakis
47 8efe95c4 Christos Stavrakakis
if sys.stdout.isatty():
48 8efe95c4 Christos Stavrakakis
    try:
49 8efe95c4 Christos Stavrakakis
        import colors
50 8efe95c4 Christos Stavrakakis
        use_colors = True
51 8efe95c4 Christos Stavrakakis
    except AttributeError:
52 8efe95c4 Christos Stavrakakis
        use_colors = False
53 f9f89675 Christos Stavrakakis
else:
54 f9f89675 Christos Stavrakakis
    use_colors = False
55 8efe95c4 Christos Stavrakakis
56 8efe95c4 Christos Stavrakakis
57 8efe95c4 Christos Stavrakakis
if use_colors:
58 8efe95c4 Christos Stavrakakis
    red = colors.red
59 8efe95c4 Christos Stavrakakis
    green = colors.green
60 8efe95c4 Christos Stavrakakis
else:
61 55775645 Vangelis Koukis
    red = lambda x: x
62 55775645 Vangelis Koukis
    green = lambda x: x
63 55775645 Vangelis Koukis
64 55775645 Vangelis Koukis
print_red = lambda x: sys.stdout.write(red(x) + "\n")
65 55775645 Vangelis Koukis
print_green = lambda x: sys.stdout.write(green(x) + "\n")
66 55775645 Vangelis Koukis
67 55775645 Vangelis Koukis
AVAILABLE_MODES = ["release", "snapshot"]
68 55775645 Vangelis Koukis
69 7316df0e Christos Stavrakakis
DESCRIPTION = """Tool for automatical build of debian packages.
70 7316df0e Christos Stavrakakis

71 7316df0e Christos Stavrakakis
%(prog)s is a helper script for automatic build of debian packages from
72 7316df0e Christos Stavrakakis
repositories that follow the `git flow` development model
73 7316df0e Christos Stavrakakis
<http://nvie.com/posts/a-successful-git-branching-model/>.
74 7316df0e Christos Stavrakakis

75 b1aa3d49 Christos Stavrakakis
This script must run from inside a clean git repository and will perform the
76 b1aa3d49 Christos Stavrakakis
following steps:
77 7316df0e Christos Stavrakakis
    * Clone your repository to a temporary directory
78 7316df0e Christos Stavrakakis
    * Merge the current branch with the corresponding debian branch
79 7316df0e Christos Stavrakakis
    * Compute the version of the new package and update the python
80 7316df0e Christos Stavrakakis
      version files
81 7316df0e Christos Stavrakakis
    * Create a new entry in debian/changelog, using `git-dch`
82 7316df0e Christos Stavrakakis
    * Create the debian packages, using `git-buildpackage`
83 7316df0e Christos Stavrakakis
    * Tag the appropriate branches if in `release` mode
84 7316df0e Christos Stavrakakis

85 b1aa3d49 Christos Stavrakakis
%(prog)s will work with the packages that are declared in `autopkg.conf`
86 b1aa3d49 Christos Stavrakakis
file, which must exist in the toplevel directory of the git repository.
87 b1aa3d49 Christos Stavrakakis

88 7316df0e Christos Stavrakakis
"""
89 7316df0e Christos Stavrakakis
90 7316df0e Christos Stavrakakis
91 7316df0e Christos Stavrakakis
def print_help(prog):
92 7316df0e Christos Stavrakakis
    print DESCRIPTION % {"prog": prog}
93 7316df0e Christos Stavrakakis
94 55775645 Vangelis Koukis
95 55775645 Vangelis Koukis
def main():
96 c642d7cb Christos Stavrakakis
    from devflow.version import __version__  # pylint: disable=E0611,F0401
97 55775645 Vangelis Koukis
    parser = OptionParser(usage="usage: %prog [options] mode",
98 7316df0e Christos Stavrakakis
                          version="devflow %s" % __version__,
99 7316df0e Christos Stavrakakis
                          add_help_option=False)
100 7316df0e Christos Stavrakakis
    parser.add_option("-h", "--help",
101 7316df0e Christos Stavrakakis
                      action="store_true",
102 7316df0e Christos Stavrakakis
                      default=False,
103 7316df0e Christos Stavrakakis
                      help="show this help message")
104 55775645 Vangelis Koukis
    parser.add_option("-k", "--keep-repo",
105 55775645 Vangelis Koukis
                      action="store_true",
106 55775645 Vangelis Koukis
                      dest="keep_repo",
107 55775645 Vangelis Koukis
                      default=False,
108 55775645 Vangelis Koukis
                      help="Do not delete the cloned repository")
109 55775645 Vangelis Koukis
    parser.add_option("-b", "--build-dir",
110 55775645 Vangelis Koukis
                      dest="build_dir",
111 55775645 Vangelis Koukis
                      default=None,
112 55775645 Vangelis Koukis
                      help="Directory to store created pacakges")
113 55775645 Vangelis Koukis
    parser.add_option("-r", "--repo-dir",
114 55775645 Vangelis Koukis
                      dest="repo_dir",
115 55775645 Vangelis Koukis
                      default=None,
116 55775645 Vangelis Koukis
                      help="Directory to clone repository")
117 55775645 Vangelis Koukis
    parser.add_option("-d", "--dirty",
118 55775645 Vangelis Koukis
                      dest="force_dirty",
119 55775645 Vangelis Koukis
                      default=False,
120 55775645 Vangelis Koukis
                      action="store_true",
121 55775645 Vangelis Koukis
                      help="Do not check if working directory is dirty")
122 b1aa3d49 Christos Stavrakakis
    parser.add_option("-c", "--config-file",
123 b1aa3d49 Christos Stavrakakis
                      dest="config_file",
124 b1aa3d49 Christos Stavrakakis
                      help="Override default configuration file")
125 c9c385c0 Christos Stavrakakis
    parser.add_option("--no-sign",
126 c9c385c0 Christos Stavrakakis
                      dest="sign",
127 c9c385c0 Christos Stavrakakis
                      action="store_false",
128 c9c385c0 Christos Stavrakakis
                      default=True,
129 c9c385c0 Christos Stavrakakis
                      help="Do not sign the packages")
130 4a8d727c Christos Stavrakakis
    parser.add_option("--key-id",
131 4a8d727c Christos Stavrakakis
                      dest="keyid",
132 4a8d727c Christos Stavrakakis
                      help="Use this keyid for gpg signing")
133 d4b7f566 Christos Stavrakakis
    parser.add_option("--dist",
134 d4b7f566 Christos Stavrakakis
                      dest="dist",
135 42868817 Christos Stavrakakis
                      default=None,
136 42868817 Christos Stavrakakis
                      help="Force distribution in Debian changelog"),
137 a09634f8 Christos Stavrakakis
    parser.add_option("-S", "--source-only",
138 a09634f8 Christos Stavrakakis
                      dest="source_only",
139 a09634f8 Christos Stavrakakis
                      default=False,
140 a09634f8 Christos Stavrakakis
                      action="store_true",
141 a09634f8 Christos Stavrakakis
                      help="Specifies a source-only build, no binary packages"
142 a09634f8 Christos Stavrakakis
                           " need to be made.")
143 1296e42b Christos Stavrakakis
    parser.add_option("--debian-branch",
144 1296e42b Christos Stavrakakis
                      dest="debian_branch",
145 1296e42b Christos Stavrakakis
                      default=None,
146 1296e42b Christos Stavrakakis
                      help="Use this debian branch, instead of"
147 1296e42b Christos Stavrakakis
                           "auto-discovering the debian branch to use")
148 55775645 Vangelis Koukis
149 55775645 Vangelis Koukis
    (options, args) = parser.parse_args()
150 55775645 Vangelis Koukis
151 7316df0e Christos Stavrakakis
    if options.help:
152 7316df0e Christos Stavrakakis
        print_help(parser.get_prog_name())
153 7316df0e Christos Stavrakakis
        parser.print_help()
154 7316df0e Christos Stavrakakis
        return
155 7316df0e Christos Stavrakakis
156 b1aa3d49 Christos Stavrakakis
    # Get build mode
157 866bb9c1 Christos Stavrakakis
    try:
158 866bb9c1 Christos Stavrakakis
        mode = args[0]
159 866bb9c1 Christos Stavrakakis
    except IndexError:
160 c181882a Christos Stavrakakis
        mode = utils.get_build_mode()
161 55775645 Vangelis Koukis
    if mode not in AVAILABLE_MODES:
162 55775645 Vangelis Koukis
        raise ValueError(red("Invalid argument! Mode must be one: %s"
163 55775645 Vangelis Koukis
                         % ", ".join(AVAILABLE_MODES)))
164 55775645 Vangelis Koukis
165 b1aa3d49 Christos Stavrakakis
    # Load the repository
166 9fe1ecd8 Christos Stavrakakis
    original_repo = utils.get_repository()
167 55775645 Vangelis Koukis
168 b1aa3d49 Christos Stavrakakis
    # Check that repository is clean
169 1e4d1435 Christos Stavrakakis
    toplevel = original_repo.working_dir
170 55775645 Vangelis Koukis
    if original_repo.is_dirty() and not options.force_dirty:
171 55775645 Vangelis Koukis
        raise RuntimeError(red("Repository %s is dirty." % toplevel))
172 55775645 Vangelis Koukis
173 b1aa3d49 Christos Stavrakakis
    # Get packages from configuration file
174 ffcbf2bb Christos Stavrakakis
    config = utils.get_config(options.config_file)
175 bec4bf12 Christos Stavrakakis
    packages = config['packages'].keys()
176 8c028e36 Christos Stavrakakis
    print_green("Will build the following packages:\n" + "\n".join(packages))
177 55775645 Vangelis Koukis
178 8c028e36 Christos Stavrakakis
    # Get current branch name and type and check if it is a valid one
179 9be34db8 Christos Stavrakakis
    branch = original_repo.head.reference.name
180 b78d6238 Christos Stavrakakis
    branch = utils.undebianize(branch)
181 4f36685f Christos Stavrakakis
    branch_type_str = utils.get_branch_type(branch)
182 55775645 Vangelis Koukis
183 445f53a7 Christos Stavrakakis
    if branch_type_str not in BRANCH_TYPES.keys():
184 8c028e36 Christos Stavrakakis
        allowed_branches = ", ".join(BRANCH_TYPES.keys())
185 5a29a44e Christos Stavrakakis
        raise ValueError("Malformed branch name '%s', cannot classify as"
186 5a29a44e Christos Stavrakakis
                         " one of %s" % (branch, allowed_branches))
187 5a29a44e Christos Stavrakakis
188 b54fa347 Christos Stavrakakis
    # Fix needed environment variables
189 b54fa347 Christos Stavrakakis
    os.environ["DEVFLOW_BUILD_MODE"] = mode
190 b54fa347 Christos Stavrakakis
    git_config = original_repo.config_reader()
191 694db487 Christos Stavrakakis
    try:
192 694db487 Christos Stavrakakis
        os.environ["DEBFULLNAME"] = git_config.get_value("user", "name")
193 694db487 Christos Stavrakakis
        os.environ["DEBEMAIL"] = git_config.get_value("user", "email")
194 694db487 Christos Stavrakakis
    except:
195 694db487 Christos Stavrakakis
        print "Could not load user/email from config"
196 b54fa347 Christos Stavrakakis
197 4de00f9c Christos Stavrakakis
    # Check that base version file and branch are correct
198 4de00f9c Christos Stavrakakis
    versioning.get_python_version()
199 4de00f9c Christos Stavrakakis
200 d0c4fc17 Christos Stavrakakis
    # Get the debian branch
201 1296e42b Christos Stavrakakis
    if options.debian_branch:
202 1296e42b Christos Stavrakakis
        debian_branch = options.debian_branch
203 1296e42b Christos Stavrakakis
    else:
204 1296e42b Christos Stavrakakis
        debian_branch = utils.get_debian_branch(branch)
205 e727d1ba Christos Stavrakakis
    origin_debian = "origin/" + debian_branch
206 9be34db8 Christos Stavrakakis
207 9be34db8 Christos Stavrakakis
    # Clone the repo
208 9be34db8 Christos Stavrakakis
    repo_dir = options.repo_dir or create_temp_directory("df-repo")
209 5b60dcab Christos Stavrakakis
    repo_dir = os.path.abspath(repo_dir)
210 2ec250c7 Christos Stavrakakis
    repo = original_repo.clone(repo_dir, branch=branch)
211 9be34db8 Christos Stavrakakis
    print_green("Cloned repository to '%s'." % repo_dir)
212 8c028e36 Christos Stavrakakis
213 5b60dcab Christos Stavrakakis
    build_dir = options.build_dir or create_temp_directory("df-build")
214 5b60dcab Christos Stavrakakis
    build_dir = os.path.abspath(build_dir)
215 5b60dcab Christos Stavrakakis
    print_green("Build directory: '%s'" % build_dir)
216 5b60dcab Christos Stavrakakis
217 9be34db8 Christos Stavrakakis
    # Create the debian branch
218 8c028e36 Christos Stavrakakis
    repo.git.branch(debian_branch, origin_debian)
219 e727d1ba Christos Stavrakakis
    print_green("Created branch '%s' to track '%s'" % (debian_branch,
220 e727d1ba Christos Stavrakakis
                origin_debian))
221 55775645 Vangelis Koukis
222 b1aa3d49 Christos Stavrakakis
    # Go to debian branch
223 55775645 Vangelis Koukis
    repo.git.checkout(debian_branch)
224 55775645 Vangelis Koukis
    print_green("Changed to branch '%s'" % debian_branch)
225 55775645 Vangelis Koukis
226 b1aa3d49 Christos Stavrakakis
    # Merge with starting branch
227 55775645 Vangelis Koukis
    repo.git.merge(branch)
228 8c028e36 Christos Stavrakakis
    print_green("Merged branch '%s' into '%s'" % (branch, debian_branch))
229 55775645 Vangelis Koukis
230 b1aa3d49 Christos Stavrakakis
    # Compute python and debian version
231 55775645 Vangelis Koukis
    cd(repo_dir)
232 e727d1ba Christos Stavrakakis
    python_version = versioning.get_python_version()
233 7316df0e Christos Stavrakakis
    debian_version = versioning.\
234 2ec7054e Christos Stavrakakis
        debian_version_from_python_version(python_version)
235 866bb9c1 Christos Stavrakakis
    print_green("The new debian version will be: '%s'" % debian_version)
236 55775645 Vangelis Koukis
237 8334fb57 Christos Stavrakakis
    # Update the version files
238 0dcfcb5f Christos Stavrakakis
    versioning.update_version()
239 8334fb57 Christos Stavrakakis
240 8c028e36 Christos Stavrakakis
    # Tag branch with python version
241 8c028e36 Christos Stavrakakis
    branch_tag = python_version
242 18be409c Christos Stavrakakis
    try:
243 18be409c Christos Stavrakakis
        repo.git.tag(branch_tag, branch)
244 18be409c Christos Stavrakakis
    except GitCommandError:
245 18be409c Christos Stavrakakis
        # Tag may already exist, if only the debian branch has changed
246 18be409c Christos Stavrakakis
        pass
247 ce5f5240 Christos Stavrakakis
    upstream_tag = "upstream/" + branch_tag
248 ce5f5240 Christos Stavrakakis
    repo.git.tag(upstream_tag, branch)
249 8c028e36 Christos Stavrakakis
250 b1aa3d49 Christos Stavrakakis
    # Update changelog
251 55775645 Vangelis Koukis
    dch = git_dch("--debian-branch=%s" % debian_branch,
252 2ec7054e Christos Stavrakakis
                  "--git-author",
253 2ec7054e Christos Stavrakakis
                  "--ignore-regex=\".*\"",
254 2ec7054e Christos Stavrakakis
                  "--multimaint-merge",
255 2ec7054e Christos Stavrakakis
                  "--since=HEAD",
256 2ec7054e Christos Stavrakakis
                  "--new-version=%s" % debian_version)
257 55775645 Vangelis Koukis
    print_green("Successfully ran '%s'" % " ".join(dch.cmd))
258 55775645 Vangelis Koukis
259 42868817 Christos Stavrakakis
    if options.dist is not None:
260 42868817 Christos Stavrakakis
        distribution = options.dist
261 42868817 Christos Stavrakakis
    elif mode == "release":
262 42868817 Christos Stavrakakis
        distribution = utils.get_distribution_codename()
263 42868817 Christos Stavrakakis
    else:
264 42868817 Christos Stavrakakis
        distribution = "unstable"
265 42868817 Christos Stavrakakis
266 42868817 Christos Stavrakakis
    f = open("debian/changelog", 'r+')
267 42868817 Christos Stavrakakis
    lines = f.readlines()
268 42868817 Christos Stavrakakis
    lines[0] = lines[0].replace("UNRELEASED", distribution)
269 42868817 Christos Stavrakakis
    lines[2] = lines[2].replace("UNRELEASED", "%s build" % mode)
270 42868817 Christos Stavrakakis
    f.seek(0)
271 42868817 Christos Stavrakakis
    f.writelines(lines)
272 42868817 Christos Stavrakakis
    f.close()
273 42868817 Christos Stavrakakis
274 55775645 Vangelis Koukis
    if mode == "release":
275 1b883fea Christos Stavrakakis
        call("vim debian/changelog")
276 8c028e36 Christos Stavrakakis
277 8c028e36 Christos Stavrakakis
    # Add changelog to INDEX
278 8c028e36 Christos Stavrakakis
    repo.git.add("debian/changelog")
279 8c028e36 Christos Stavrakakis
    # Commit Changes
280 8c028e36 Christos Stavrakakis
    repo.git.commit("-s", "-a", m="Bump version to %s" % debian_version)
281 8c028e36 Christos Stavrakakis
    # Tag debian branch
282 6e9193cb Christos Stavrakakis
    debian_branch_tag = "debian/" + utils.version_to_tag(debian_version)
283 7fcadb0c Christos Stavrakakis
    if mode == "release":
284 7fcadb0c Christos Stavrakakis
        repo.git.tag(debian_branch_tag)
285 55775645 Vangelis Koukis
286 55775645 Vangelis Koukis
    # Add version.py files to repo
287 1b883fea Christos Stavrakakis
    call("grep \"__version_vcs\" -r . -l -I | xargs git add -f")
288 55775645 Vangelis Koukis
289 8c028e36 Christos Stavrakakis
    # Create debian packages
290 866bb9c1 Christos Stavrakakis
    cd(repo_dir)
291 3a150e7c Christos Stavrakakis
    version_files = []
292 3a150e7c Christos Stavrakakis
    for _, pkg_info in config['packages'].items():
293 3a150e7c Christos Stavrakakis
        version_files.append(pkg_info['version_file'])
294 3a150e7c Christos Stavrakakis
    ignore_regexp = "|".join(["^(%s)$" % vf for vf in version_files])
295 c9c385c0 Christos Stavrakakis
    build_cmd = "git-buildpackage --git-export-dir=%s"\
296 c9c385c0 Christos Stavrakakis
                " --git-upstream-branch=%s --git-debian-branch=%s"\
297 c9c385c0 Christos Stavrakakis
                " --git-export=INDEX --git-ignore-new -sa"\
298 3a150e7c Christos Stavrakakis
                " --source-option='\"--extend-diff-ignore=%s\"'"\
299 3a150e7c Christos Stavrakakis
                " --git-upstream-tag=%s"\
300 3a150e7c Christos Stavrakakis
                % (build_dir, branch, debian_branch, ignore_regexp,
301 3a150e7c Christos Stavrakakis
                   upstream_tag)
302 a09634f8 Christos Stavrakakis
    if options.source_only:
303 a09634f8 Christos Stavrakakis
        build_cmd += " -S"
304 c9c385c0 Christos Stavrakakis
    if not options.sign:
305 c9c385c0 Christos Stavrakakis
        build_cmd += " -uc -us"
306 4a8d727c Christos Stavrakakis
    elif options.keyid:
307 4a8d727c Christos Stavrakakis
        build_cmd += " -k\"'%s'\"" % options.keyid
308 c9c385c0 Christos Stavrakakis
    call(build_cmd)
309 55775645 Vangelis Koukis
310 b1aa3d49 Christos Stavrakakis
    # Remove cloned repo
311 f80b3f6a Christos Stavrakakis
    if mode != 'release' and not options.keep_repo:
312 55775645 Vangelis Koukis
        print_green("Removing cloned repo '%s'." % repo_dir)
313 55775645 Vangelis Koukis
        rm("-r", repo_dir)
314 55775645 Vangelis Koukis
315 8c028e36 Christos Stavrakakis
    # Print final info
316 8c028e36 Christos Stavrakakis
    info = (("Version", debian_version),
317 8c028e36 Christos Stavrakakis
            ("Upstream branch", branch),
318 8c028e36 Christos Stavrakakis
            ("Upstream tag", branch_tag),
319 8c028e36 Christos Stavrakakis
            ("Debian branch", debian_branch),
320 8c028e36 Christos Stavrakakis
            ("Debian tag", debian_branch_tag),
321 8c028e36 Christos Stavrakakis
            ("Repository directory", repo_dir),
322 8c028e36 Christos Stavrakakis
            ("Packages directory", build_dir))
323 8c028e36 Christos Stavrakakis
    print_green("\n".join(["%s: %s" % (name, val) for name, val in info]))
324 866bb9c1 Christos Stavrakakis
325 b1aa3d49 Christos Stavrakakis
    # Print help message
326 866bb9c1 Christos Stavrakakis
    if mode == "release":
327 8c028e36 Christos Stavrakakis
        origin = original_repo.remote().url
328 8c028e36 Christos Stavrakakis
        repo.create_remote("original_origin", origin)
329 8c028e36 Christos Stavrakakis
        print_green("Created remote 'original_origin' for the repository '%s'"
330 8c028e36 Christos Stavrakakis
                    % origin)
331 866bb9c1 Christos Stavrakakis
332 8c028e36 Christos Stavrakakis
        print_green("To update repositories '%s' and '%s' go to '%s' and run:"
333 8c028e36 Christos Stavrakakis
                    % (toplevel, origin, repo_dir))
334 8c028e36 Christos Stavrakakis
        for remote in ['origin', 'original_origin']:
335 8c2716c5 Christos Stavrakakis
            objects = [debian_branch, branch_tag, debian_branch_tag]
336 8c2716c5 Christos Stavrakakis
            print_green("git push %s %s" % (remote, " ".join(objects)))
337 866bb9c1 Christos Stavrakakis
338 866bb9c1 Christos Stavrakakis
339 ca01e50e Christos Stavrakakis
def create_temp_directory(suffix):
340 ca01e50e Christos Stavrakakis
    create_dir_cmd = mktemp("-d", "/tmp/" + suffix + "-XXXXX")
341 ca01e50e Christos Stavrakakis
    return create_dir_cmd.stdout.strip()
342 55775645 Vangelis Koukis
343 55775645 Vangelis Koukis
344 1b883fea Christos Stavrakakis
def call(cmd):
345 1b883fea Christos Stavrakakis
    rc = os.system(cmd)
346 1b883fea Christos Stavrakakis
    if rc:
347 06dcdc1b Christos Stavrakakis
        raise RuntimeError("Command '%s' failed!" % cmd)
348 b1aa3d49 Christos Stavrakakis
349 b1aa3d49 Christos Stavrakakis
350 55775645 Vangelis Koukis
if __name__ == "__main__":
351 55775645 Vangelis Koukis
    sys.exit(main())