Statistics
| Branch: | Tag: | Revision:

root / devflow / autopkg.py @ 8f939e17

History | View | Annotate | Download (12.8 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 6b88d711 Christos Stavrakakis
    v = utils.get_vcs_info()
190 b54fa347 Christos Stavrakakis
    os.environ["DEVFLOW_BUILD_MODE"] = mode
191 6b88d711 Christos Stavrakakis
    os.environ["DEBFULLNAME"] = v.name
192 6b88d711 Christos Stavrakakis
    os.environ["DEBEMAIL"] = v.email
193 b54fa347 Christos Stavrakakis
194 4de00f9c Christos Stavrakakis
    # Check that base version file and branch are correct
195 4de00f9c Christos Stavrakakis
    versioning.get_python_version()
196 4de00f9c Christos Stavrakakis
197 d0c4fc17 Christos Stavrakakis
    # Get the debian branch
198 1296e42b Christos Stavrakakis
    if options.debian_branch:
199 1296e42b Christos Stavrakakis
        debian_branch = options.debian_branch
200 1296e42b Christos Stavrakakis
    else:
201 1296e42b Christos Stavrakakis
        debian_branch = utils.get_debian_branch(branch)
202 e727d1ba Christos Stavrakakis
    origin_debian = "origin/" + debian_branch
203 9be34db8 Christos Stavrakakis
204 9be34db8 Christos Stavrakakis
    # Clone the repo
205 9be34db8 Christos Stavrakakis
    repo_dir = options.repo_dir or create_temp_directory("df-repo")
206 5b60dcab Christos Stavrakakis
    repo_dir = os.path.abspath(repo_dir)
207 2ec250c7 Christos Stavrakakis
    repo = original_repo.clone(repo_dir, branch=branch)
208 9be34db8 Christos Stavrakakis
    print_green("Cloned repository to '%s'." % repo_dir)
209 8c028e36 Christos Stavrakakis
210 5b60dcab Christos Stavrakakis
    build_dir = options.build_dir or create_temp_directory("df-build")
211 5b60dcab Christos Stavrakakis
    build_dir = os.path.abspath(build_dir)
212 5b60dcab Christos Stavrakakis
    print_green("Build directory: '%s'" % build_dir)
213 5b60dcab Christos Stavrakakis
214 9be34db8 Christos Stavrakakis
    # Create the debian branch
215 8c028e36 Christos Stavrakakis
    repo.git.branch(debian_branch, origin_debian)
216 e727d1ba Christos Stavrakakis
    print_green("Created branch '%s' to track '%s'" % (debian_branch,
217 e727d1ba Christos Stavrakakis
                origin_debian))
218 55775645 Vangelis Koukis
219 b1aa3d49 Christos Stavrakakis
    # Go to debian branch
220 55775645 Vangelis Koukis
    repo.git.checkout(debian_branch)
221 55775645 Vangelis Koukis
    print_green("Changed to branch '%s'" % debian_branch)
222 55775645 Vangelis Koukis
223 b1aa3d49 Christos Stavrakakis
    # Merge with starting branch
224 55775645 Vangelis Koukis
    repo.git.merge(branch)
225 8c028e36 Christos Stavrakakis
    print_green("Merged branch '%s' into '%s'" % (branch, debian_branch))
226 55775645 Vangelis Koukis
227 b1aa3d49 Christos Stavrakakis
    # Compute python and debian version
228 55775645 Vangelis Koukis
    cd(repo_dir)
229 e727d1ba Christos Stavrakakis
    python_version = versioning.get_python_version()
230 7316df0e Christos Stavrakakis
    debian_version = versioning.\
231 2ec7054e Christos Stavrakakis
        debian_version_from_python_version(python_version)
232 866bb9c1 Christos Stavrakakis
    print_green("The new debian version will be: '%s'" % debian_version)
233 55775645 Vangelis Koukis
234 8334fb57 Christos Stavrakakis
    # Update the version files
235 0dcfcb5f Christos Stavrakakis
    versioning.update_version()
236 8334fb57 Christos Stavrakakis
237 d3af231f Christos Stavrakakis
238 d3af231f Christos Stavrakakis
    if not options.sign:
239 d3af231f Christos Stavrakakis
        sign_tag_opt = None
240 d3af231f Christos Stavrakakis
    elif options.keyid:
241 d3af231f Christos Stavrakakis
        sign_tag_opt = "-u=%s" % options.keyid
242 d3af231f Christos Stavrakakis
    elif mode == "release":
243 d3af231f Christos Stavrakakis
        sign_tag_opt = "-s"
244 d3af231f Christos Stavrakakis
    else:
245 d3af231f Christos Stavrakakis
        sign_tag_opt = None
246 d3af231f Christos Stavrakakis
247 8c028e36 Christos Stavrakakis
    # Tag branch with python version
248 8c028e36 Christos Stavrakakis
    branch_tag = python_version
249 d3af231f Christos Stavrakakis
    tag_message = "%s version %s" % (mode.capitalize(), python_version)
250 18be409c Christos Stavrakakis
    try:
251 d3af231f Christos Stavrakakis
        repo.git.tag(branch_tag, branch, sign_tag_opt, "-m=%s" % tag_message)
252 18be409c Christos Stavrakakis
    except GitCommandError:
253 18be409c Christos Stavrakakis
        # Tag may already exist, if only the debian branch has changed
254 18be409c Christos Stavrakakis
        pass
255 ce5f5240 Christos Stavrakakis
    upstream_tag = "upstream/" + branch_tag
256 ce5f5240 Christos Stavrakakis
    repo.git.tag(upstream_tag, branch)
257 8c028e36 Christos Stavrakakis
258 b1aa3d49 Christos Stavrakakis
    # Update changelog
259 55775645 Vangelis Koukis
    dch = git_dch("--debian-branch=%s" % debian_branch,
260 2ec7054e Christos Stavrakakis
                  "--git-author",
261 2ec7054e Christos Stavrakakis
                  "--ignore-regex=\".*\"",
262 2ec7054e Christos Stavrakakis
                  "--multimaint-merge",
263 2ec7054e Christos Stavrakakis
                  "--since=HEAD",
264 2ec7054e Christos Stavrakakis
                  "--new-version=%s" % debian_version)
265 55775645 Vangelis Koukis
    print_green("Successfully ran '%s'" % " ".join(dch.cmd))
266 55775645 Vangelis Koukis
267 42868817 Christos Stavrakakis
    if options.dist is not None:
268 42868817 Christos Stavrakakis
        distribution = options.dist
269 42868817 Christos Stavrakakis
    elif mode == "release":
270 42868817 Christos Stavrakakis
        distribution = utils.get_distribution_codename()
271 42868817 Christos Stavrakakis
    else:
272 42868817 Christos Stavrakakis
        distribution = "unstable"
273 42868817 Christos Stavrakakis
274 42868817 Christos Stavrakakis
    f = open("debian/changelog", 'r+')
275 42868817 Christos Stavrakakis
    lines = f.readlines()
276 42868817 Christos Stavrakakis
    lines[0] = lines[0].replace("UNRELEASED", distribution)
277 42868817 Christos Stavrakakis
    lines[2] = lines[2].replace("UNRELEASED", "%s build" % mode)
278 42868817 Christos Stavrakakis
    f.seek(0)
279 42868817 Christos Stavrakakis
    f.writelines(lines)
280 42868817 Christos Stavrakakis
    f.close()
281 42868817 Christos Stavrakakis
282 55775645 Vangelis Koukis
    if mode == "release":
283 1b883fea Christos Stavrakakis
        call("vim debian/changelog")
284 8c028e36 Christos Stavrakakis
285 8c028e36 Christos Stavrakakis
    # Add changelog to INDEX
286 8c028e36 Christos Stavrakakis
    repo.git.add("debian/changelog")
287 8c028e36 Christos Stavrakakis
    # Commit Changes
288 8c028e36 Christos Stavrakakis
    repo.git.commit("-s", "-a", m="Bump version to %s" % debian_version)
289 8c028e36 Christos Stavrakakis
    # Tag debian branch
290 6e9193cb Christos Stavrakakis
    debian_branch_tag = "debian/" + utils.version_to_tag(debian_version)
291 d3af231f Christos Stavrakakis
    tag_message = "%s version %s" % (mode.capitalize(), debian_version)
292 7fcadb0c Christos Stavrakakis
    if mode == "release":
293 d3af231f Christos Stavrakakis
        repo.git.tag(debian_branch_tag, sign_tag_opt, "-m=%s" % tag_message)
294 55775645 Vangelis Koukis
295 55775645 Vangelis Koukis
    # Add version.py files to repo
296 1b883fea Christos Stavrakakis
    call("grep \"__version_vcs\" -r . -l -I | xargs git add -f")
297 55775645 Vangelis Koukis
298 8c028e36 Christos Stavrakakis
    # Create debian packages
299 866bb9c1 Christos Stavrakakis
    cd(repo_dir)
300 3a150e7c Christos Stavrakakis
    version_files = []
301 3a150e7c Christos Stavrakakis
    for _, pkg_info in config['packages'].items():
302 3a150e7c Christos Stavrakakis
        version_files.append(pkg_info['version_file'])
303 3a150e7c Christos Stavrakakis
    ignore_regexp = "|".join(["^(%s)$" % vf for vf in version_files])
304 c9c385c0 Christos Stavrakakis
    build_cmd = "git-buildpackage --git-export-dir=%s"\
305 c9c385c0 Christos Stavrakakis
                " --git-upstream-branch=%s --git-debian-branch=%s"\
306 c9c385c0 Christos Stavrakakis
                " --git-export=INDEX --git-ignore-new -sa"\
307 8f939e17 Christos Stavrakakis
                " --source-option=--auto-commit"\
308 3a150e7c Christos Stavrakakis
                " --git-upstream-tag=%s"\
309 8f939e17 Christos Stavrakakis
                % (build_dir, branch, debian_branch, upstream_tag)
310 a09634f8 Christos Stavrakakis
    if options.source_only:
311 a09634f8 Christos Stavrakakis
        build_cmd += " -S"
312 c9c385c0 Christos Stavrakakis
    if not options.sign:
313 c9c385c0 Christos Stavrakakis
        build_cmd += " -uc -us"
314 4a8d727c Christos Stavrakakis
    elif options.keyid:
315 4a8d727c Christos Stavrakakis
        build_cmd += " -k\"'%s'\"" % options.keyid
316 c9c385c0 Christos Stavrakakis
    call(build_cmd)
317 55775645 Vangelis Koukis
318 b1aa3d49 Christos Stavrakakis
    # Remove cloned repo
319 f80b3f6a Christos Stavrakakis
    if mode != 'release' and not options.keep_repo:
320 55775645 Vangelis Koukis
        print_green("Removing cloned repo '%s'." % repo_dir)
321 55775645 Vangelis Koukis
        rm("-r", repo_dir)
322 55775645 Vangelis Koukis
323 8c028e36 Christos Stavrakakis
    # Print final info
324 8c028e36 Christos Stavrakakis
    info = (("Version", debian_version),
325 8c028e36 Christos Stavrakakis
            ("Upstream branch", branch),
326 8c028e36 Christos Stavrakakis
            ("Upstream tag", branch_tag),
327 8c028e36 Christos Stavrakakis
            ("Debian branch", debian_branch),
328 8c028e36 Christos Stavrakakis
            ("Debian tag", debian_branch_tag),
329 8c028e36 Christos Stavrakakis
            ("Repository directory", repo_dir),
330 8c028e36 Christos Stavrakakis
            ("Packages directory", build_dir))
331 8c028e36 Christos Stavrakakis
    print_green("\n".join(["%s: %s" % (name, val) for name, val in info]))
332 866bb9c1 Christos Stavrakakis
333 b1aa3d49 Christos Stavrakakis
    # Print help message
334 866bb9c1 Christos Stavrakakis
    if mode == "release":
335 8c028e36 Christos Stavrakakis
        origin = original_repo.remote().url
336 8c028e36 Christos Stavrakakis
        repo.create_remote("original_origin", origin)
337 8c028e36 Christos Stavrakakis
        print_green("Created remote 'original_origin' for the repository '%s'"
338 8c028e36 Christos Stavrakakis
                    % origin)
339 866bb9c1 Christos Stavrakakis
340 8c028e36 Christos Stavrakakis
        print_green("To update repositories '%s' and '%s' go to '%s' and run:"
341 8c028e36 Christos Stavrakakis
                    % (toplevel, origin, repo_dir))
342 8c028e36 Christos Stavrakakis
        for remote in ['origin', 'original_origin']:
343 8c2716c5 Christos Stavrakakis
            objects = [debian_branch, branch_tag, debian_branch_tag]
344 8c2716c5 Christos Stavrakakis
            print_green("git push %s %s" % (remote, " ".join(objects)))
345 866bb9c1 Christos Stavrakakis
346 866bb9c1 Christos Stavrakakis
347 ca01e50e Christos Stavrakakis
def create_temp_directory(suffix):
348 ca01e50e Christos Stavrakakis
    create_dir_cmd = mktemp("-d", "/tmp/" + suffix + "-XXXXX")
349 ca01e50e Christos Stavrakakis
    return create_dir_cmd.stdout.strip()
350 55775645 Vangelis Koukis
351 55775645 Vangelis Koukis
352 1b883fea Christos Stavrakakis
def call(cmd):
353 1b883fea Christos Stavrakakis
    rc = os.system(cmd)
354 1b883fea Christos Stavrakakis
    if rc:
355 06dcdc1b Christos Stavrakakis
        raise RuntimeError("Command '%s' failed!" % cmd)
356 b1aa3d49 Christos Stavrakakis
357 b1aa3d49 Christos Stavrakakis
358 55775645 Vangelis Koukis
if __name__ == "__main__":
359 55775645 Vangelis Koukis
    sys.exit(main())