File: set_version.py

package info (click to toggle)
therion 6.3.4-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 15,544 kB
  • sloc: cpp: 195,273; tcl: 19,779; ansic: 8,434; perl: 1,895; makefile: 1,281; python: 255; asm: 219; sh: 104
file content (62 lines) | stat: -rwxr-xr-x 2,203 bytes parent folder | download | duplicates (2)
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
#!/usr/bin/env python3

# set version information based on
#   1) git data
#   2) the first line of the file CHANGES (valid for releases)
#   3) use at least previous release info + current date

import subprocess, datetime, re, sys, pathlib

def run(s):
  return subprocess.check_output(s, shell=True, stderr=subprocess.DEVNULL).strip().decode('ascii')

if len(sys.argv) > 1:
  output_folder = pathlib.Path(sys.argv[1])
else:
  output_folder = pathlib.Path('.')

try:
  release = run('git tag --points-at HEAD') # check for a TAG in the current commit
  if run('git status -s'): # check for uncommitted changes
    uncommitted = '+dev'
    date = datetime.date.today().isoformat()
  else:
    uncommitted = ''
    date = run('git show -s --format="%cd" --date=short HEAD')
  if release.startswith('v'):   # release number if the commit is tagged
    ver = "%s (%s)" % (release[1:]+uncommitted, date) 
  else:                         # otherwise last known tag + short commit hash
    prevver = run('git describe --abbrev=0 --tags HEAD')
    commit = run('git rev-parse --short HEAD')
    ver = "%s+%s (%s)" % (prevver[1:], commit+uncommitted, date)
except:   # no git version available
  patt = r'Therion (\d+\.\d+(?:\.\d+)?) \((\d{4}-\d\d-\d\d)\):$'
  try:   # check the file CHANGES for version info on the first line (this would be a released version)
    with open('CHANGES') as f:
      txt = f.readline().strip()
    m = re.match(patt,txt)
    if m:
      ver = '%s (%s)' % (m.group(1),m.group(2))
    else:
      raise ValueError()
  except:   # find the most recent release in the file CHANGES
    with open('CHANGES') as f:
      for l in f:
        m = re.match(patt,l.strip())
        if m:
          ver1 = m.group(1)
          break
    ver = "%s+dev (compiled on %s)" % (ver1, datetime.date.today().isoformat())

try:
    oldver = open(output_folder / 'thversion.h').read()
except:
    oldver = ""

newver = '#define THVERSION "%s"\n' % ver
if (oldver != newver):
  with open(output_folder / 'thversion.h','w') as f:
    f.write(newver)
  (output_folder / 'thbook/').mkdir(parents=True, exist_ok=True)
  with open(output_folder / 'thbook/version.tex','w') as f:
    f.write('%s\n' % ver)