"Fossies" - the Fresh Open Source Software Archive

Member "relax-5.0.0/version.py" (25 Aug 2020, 5249 Bytes) of package /linux/privat/relax-5.0.0.src.tar.bz2:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Python source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. For more information about "version.py" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 4.1.3_vs_5.0.0.

    1 ###############################################################################
    2 #                                                                             #
    3 # Copyright (C) 2006,2009,2012-2014,2017-2018 Edward d'Auvergne               #
    4 #                                                                             #
    5 # This file is part of the program relax (http://www.nmr-relax.com).          #
    6 #                                                                             #
    7 # This program is free software: you can redistribute it and/or modify        #
    8 # it under the terms of the GNU General Public License as published by        #
    9 # the Free Software Foundation, either version 3 of the License, or           #
   10 # (at your option) any later version.                                         #
   11 #                                                                             #
   12 # This program is distributed in the hope that it will be useful,             #
   13 # but WITHOUT ANY WARRANTY; without even the implied warranty of              #
   14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
   15 # GNU General Public License for more details.                                #
   16 #                                                                             #
   17 # You should have received a copy of the GNU General Public License           #
   18 # along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
   19 #                                                                             #
   20 ###############################################################################
   21 
   22 # Module docstring.
   23 """Module for relax version information."""
   24 
   25 # Python module imports.
   26 from os import F_OK, access, sep
   27 try:
   28     from subprocess import PIPE, Popen
   29 except ImportError:
   30     PIPE, Popen = None, None
   31 
   32 # relax module imports.
   33 from lib.compat import SYSTEM
   34 import lib.structure.internal.object
   35 from status import Status; status = Status()
   36 
   37 
   38 version = "5.0.0"
   39 repo_head = None
   40 repo_type = None
   41 repo_url = None
   42 
   43 
   44 def repo_information():
   45     """Determine the subversion revision number and URL from svn or git-svn copies of the repository."""
   46 
   47     # The global variables
   48     global repo_head
   49     global repo_type
   50     global repo_url
   51 
   52     # The variables are already set, so do nothing.
   53     if repo_head != None or repo_type != None or repo_url != None:
   54         return
   55 
   56     # Python 2.3 and earlier.
   57     if Popen == None:
   58         return
   59 
   60     # Command separator.
   61     symbol = ";"
   62     if SYSTEM == 'Windows' or SYSTEM == 'Microsoft':
   63         symbol = "&&"
   64 
   65     # The command to use.
   66     cmd = None
   67     if access(status.install_path+sep+'.git'+sep+'svn'+sep+'refs', F_OK):
   68         cmd = 'cd %s %s git svn info' % (status.install_path, symbol)
   69         repo_type = 'git-svn'
   70     elif access(status.install_path+sep+'.git', F_OK):
   71         cmd = 'cd %s %s git rev-parse HEAD %s git remote -v' % (status.install_path, symbol, symbol)
   72         repo_type = 'git'
   73     elif access(status.install_path+sep+'.svn', F_OK):
   74         cmd = 'svn info %s' % status.install_path
   75         repo_type = 'svn'
   76 
   77     # Not a repository copy, so do nothing.
   78     if not cmd:
   79         return
   80 
   81     # Open the pipe and run the command.
   82     pipe = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=False)
   83 
   84     # Loop over the output lines.
   85     lines = pipe.stdout.readlines()
   86     for i in range(len(lines)):
   87         # Decode Python 3 byte arrays.
   88         if hasattr(lines[i], 'decode'):
   89             lines[i] = lines[i].decode()
   90 
   91         # Git info.
   92         if repo_type == 'git':
   93             # Git hash.
   94             if i == 0:
   95                 repo_head = lines[i].strip()
   96                 continue
   97 
   98             # Remote URL.
   99             if repo_url:
  100                 repo_url += '\n'
  101             else:
  102                 repo_url = ''
  103             remote_info = lines[i].split()
  104             repo_url += "%s %s" % (remote_info[1], remote_info[2])
  105 
  106         # SVN and git-svn.
  107         else:
  108             # Split up the line.
  109             row = lines[i].split()
  110 
  111             # Store revision as the global variable.
  112             if len(row) and row[0] == 'Revision:':
  113                 repo_head = str(row[1])
  114 
  115             # Store URL as the global variable.
  116             if len(row) and row[0] == 'URL:':
  117                 repo_url = str(row[1])
  118 
  119 
  120 def version_full():
  121     """Return the full relax version, including all SVN info for repository versions.
  122 
  123     @return:    The relax version string.
  124     @rtype:     str
  125     """
  126 
  127     # The relax version.
  128     ver = version
  129 
  130     # Repository version.
  131     if ver == 'repository commit':
  132         # The global variables
  133         global repo_head
  134         global repo_type
  135         global repo_url
  136 
  137         # Change the version string.
  138         if repo_head != None:
  139             if repo_type == 'git':
  140                 ver = version + " " + repo_head
  141             else:
  142                 ver = version + " r" + repo_head
  143         if repo_url != None:
  144             ver += " " + repo_url.replace('\n', '; ')
  145 
  146     # Return the version.
  147     return ver
  148 
  149 
  150 # Fetch the repository information, if present.
  151 repo_information()
  152 
  153 # Set the version in the relax internal structural object.
  154 lib.structure.internal.object.RELAX_VERSION = version_full()