Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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

# -*- coding: utf-8 -*- 

# Author: Douglas Creager <dcreager@dcreager.net> 

# This file is placed into the public domain. 

 

# Calculates the current version number.  If possible, this is the 

# output of “git describe”, modified to conform to the versioning 

# scheme that setuptools uses.  If “git describe” returns an error 

# (most likely because we're in an unpacked copy of a release tarball, 

# rather than in a git working copy), then we fall back on reading the 

# contents of the RELEASE-VERSION file. 

# 

# To use this script, simply import it your setup.py file, and use the 

# results of get_git_version() as your package version: 

# 

# from version import * 

# 

# setup( 

#     version=get_git_version(), 

#     . 

#     . 

#     . 

# ) 

# 

# This will automatically update the RELEASE-VERSION file, if 

# necessary.  Note that the RELEASE-VERSION file should *not* be 

# checked into git; please add it to your top-level .gitignore file. 

# 

# You'll probably want to distribute the RELEASE-VERSION file in your 

# sdist tarballs; to do this, just create a MANIFEST.in file that 

# contains the following line: 

# 

#   include RELEASE-VERSION 

 

__all__ = ("get_git_version") 

 

import os 

from subprocess import Popen, PIPE 

 

VERSION_FILE = os.path.abspath(os.path.join(os.path.dirname(__file__), 

        os.pardir, os.pardir, "RELEASE-VERSION")) 

 

 

def call_git_describe(abbrev=4): 

    try: 

        p = Popen(['git', 'describe', '--dirty', '--abbrev=%d' % abbrev, 

                   '--always'], 

                  cwd=os.path.dirname(VERSION_FILE), stdout=PIPE, stderr=PIPE) 

        p.stderr.close() 

        line = p.stdout.readlines()[0] 

        # (this line prevents official releases) 

        # should work again now, see #482 and obspy/obspy@b437f31 

        if "-" not in line and "." not in line: 

            line = "0.0.0-g%s" % line 

        return line.strip() 

    except: 

        return None 

 

 

def read_release_version(): 

    try: 

        version = open(VERSION_FILE, "r").readlines()[0] 

        return version.strip() 

    except: 

        return None 

 

 

def write_release_version(version): 

    open(VERSION_FILE, "w").write("%s\n" % version) 

 

 

def get_git_version(abbrev=4): 

    # Read in the version that's currently in RELEASE-VERSION. 

    release_version = read_release_version() 

 

    # First try to get the current version using “git describe”. 

    version = call_git_describe(abbrev) 

 

    # If that doesn't work, fall back on the value that's in 

    # RELEASE-VERSION. 

    if version is None: 

        version = release_version 

 

    # If we still don't have anything, that's an error. 

    if version is None: 

        return '0.0.0-tar/zipball' 

 

    # If the current version is different from what's in the 

    # RELEASE-VERSION file, update the file to be current. 

    if version != release_version: 

        write_release_version(version) 

 

    # Finally, return the current version. 

    return version 

 

 

if __name__ == "__main__": 

    print get_git_version()