Revision 00351409

b/devtools/version.py
85 85
        revno = len(list(repo.iter_commits()))
86 86
        desc = repo.git.describe("--tags")
87 87
        toplevel = repo.working_dir
88
    except subprocess.CalledProcessError:
88
    except git.InvalidGitRepositoryError:
89 89
        log.error("Could not retrieve git information. " +
90 90
                  "Current directory not a git repository?")
91
        raise
91
        return None
92 92

  
93 93
    info = namedtuple("vcs_info", ["branch", "revid", "revno",
94 94
                                   "desc", "toplevel"])
......
160 160
    develop and feature branches.
161 161

  
162 162
    The suffix 'rc' is used to denote release candidates. 'rc' versions live
163
    only release and hotfix branches.
163
    only in release and hotfix branches.
164 164

  
165 165
    Suffixes 'next' and 'rc' have been chosen to ensure proper ordering
166 166
    according to setuptools rules:
......
244 244
    if brnorm == "debian":
245 245
        brnorm = "debian-master"
246 246
    if brnorm.startswith("debian-"):
247
        brnorm = brnorm.split("debian-")[1]
247
        brnorm = brnorm.replace("debian-", "", 1)
248 248

  
249 249
    # Sanity checks
250 250
    if "-" in brnorm:
251 251
        btypestr = brnorm.split("-")[0]
252
        bverstr = brnorm.split("-")[1]
253
        if bverstr == "":
254
            raise ValueError("Malformed branch name '%s'" % branch)
255
        versioned = True
256 252
    else:
257
        btypestr = branch
258
        versioned = False
253
        btypestr = brnorm
254

  
259 255
    try:
260 256
        btype = BRANCH_TYPES[btypestr]
261 257
    except KeyError:
......
263 259
        raise ValueError("Malformed branch name '%s', cannot classify as one "
264 260
                         "of %s" % (btypestr, allowed_branches))
265 261

  
266
    if versioned != btype.versioned:
267
        raise ValueError(("Branch name '%s' should %s contain version" %
268
                          (branch, "not" if versioned else "")))
269
    if btype.versioned and not re.match(VERSION_RE, bverstr):
270
        raise ValueError(("Malformed version '%s' in branch name '%s'" %
271
                          (bverstr, branch)))
262
    if btype.versioned:
263
        try:
264
            bverstr = brnorm.split("-")[1]
265
        except IndexError:
266
            # No version
267
            raise ValueError("Branch name '%s' should contain version" %
268
                             branch)
269

  
270
        # Check that version is well-formed
271
        if not re.match(VERSION_RE, bverstr):
272
            raise ValueError("Malformed version '%s' in branch name '%s'" %
273
                             (bverstr, branch))
272 274

  
273 275
    m = re.match(btype.allowed_version_re, base_version)
274 276
    if not m or (btype.versioned and m.groupdict()["bverstr"] != bverstr):
275
        raise ValueError(("Base version '%s' unsuitable for branch name '%s'" %
276
                         (base_version, branch)))
277
        raise ValueError("Base version '%s' unsuitable for branch name '%s'" %
278
                         (base_version, branch))
277 279

  
278 280
    if mode not in ["snapshot", "release"]:
279
        raise ValueError(("Specified mode '%s' should be one of 'snapshot' or "
280
                          "'release'" % mode))
281
        raise ValueError("Specified mode '%s' should be one of 'snapshot' or "
282
                         "'release'" % mode)
281 283
    snap = (mode == "snapshot")
282 284

  
283 285
    if ((snap and not btype.builds_snapshot) or
284 286
        (not snap and not btype.builds_release)):
285
        raise ValueError(("Invalid mode '%s' in branch type '%s'" %
286
                          (mode, btypestr)))
287
        raise ValueError("Invalid mode '%s' in branch type '%s'" %
288
                         (mode, btypestr))
287 289

  
288 290
    if snap:
289 291
        v = "%s_%d_%s" % (base_version, vcs_info.revno, vcs_info.revid)
......
361 363
    True
362 364

  
363 365
    """
364
    return pyver.replace("_", "~").replace("rc", "~rc")
366
    return pyver.replace("_", "~").replace("rc", "~rc") + "-1"
365 367

  
366 368

  
367 369
def debian_version(base_version, vcs_info, mode):
......
369 371
    return debian_version_from_python_version(p)
370 372

  
371 373

  
374
def user_info():
375
    import getpass
376
    import socket
377
    return "%s@%s" % (getpass.getuser(), socket.getfqdn())
378

  
379

  
372 380
def update_version(module, name="version", root="."):
373 381
    """
374 382
    Generate or replace version.py as a submodule of `module`.
......
378 386

  
379 387
    """
380 388

  
381
    # FIXME: exit or fail if not in development environment?
382 389
    v = vcs_info()
390
    if not v:
391
        # Return early if not in development environment
392
        return
383 393
    b = base_version(v)
384 394
    mode = build_mode()
385 395
    paths = [root] + module.split(".") + ["%s.py" % name]
386 396
    module_filename = os.path.join(*paths)
397
    version = python_version(b, v, mode)
387 398
    content = """
388 399
__version__ = "%(version)s"
389
__version_info__ = __version__.split(".")
400
__version_info__ = %(version_info)s
390 401
__version_vcs_info__ = %(vcs_info)s
391
    """ % dict(version=python_version(b, v, mode),
392
            vcs_info=pprint.PrettyPrinter().pformat(dict(v._asdict())))
402
__version_user_info__ = %(user_info)s
403
    """ % dict(version=version, version_info=version.split("."),
404
               vcs_info=pprint.PrettyPrinter().pformat(dict(v._asdict())),
405
               user_info=user_info())
393 406

  
394 407
    module_file = file(module_filename, "w+")
395 408
    module_file.write(content)
b/snf-astakos-app/setup.py
49 49
try:
50 50
    # use devtools to update the version file
51 51
    from devtools.version import update_version
52
    update_version('astakos', 'common', HERE)
52
    update_version('astakos', 'version', HERE)
53 53
except ImportError:
54 54
    raise RuntimeError("devtools is a build dependency")
55 55

  

Also available in: Unified diff