[SciPy-dev] version numbers.
Pearu Peterson
pearu at cens.ioc.ee
Tue Feb 19 16:37:33 EST 2002
Hi Eric,
On Tue, 19 Feb 2002, Pearu Peterson wrote:
> I have studied a possibility to let CVS server to calculate these
> cvs-numbers. Indeed, it is possible but the corresponding script needs
> some adjustements. So, I hope that the frustation with updating version
> numbers in CVS should be temporary.
I have implemented required hooks and also tested in my CVS tree. It seems
to work very nicely.
So, in attachement you find a python script that calculates cvs version
numbers. Installation instructions for scipy are the following:
1) Copy the file calc_cvs_version.py to /home/cvsroot/CVSROOT:
cp calc_cvs_version.py /home/cvsroot/CVSROOT/calc_cvs_version.py
2) Add the following (single) line to /home/cvsroot/CVSROOT/loginfo file:
world/scipy (/usr/bin/python $CVSROOT/CVSROOT/calc_cvs_version.py $CVSROOT/world/scipy)
3) Try to commit something and then do update. This should create file
__cvs_version__.py into the scipy tree.
Few notes:
If someone tries to change __cvs_version__.py and commit it, it will have
no effect. So it is safe.
If files are commited to CVS then __cvs_version__.py will be updated in
each commit automatically.
You may also want to check the algorithm in calc_cvs_version.py in case I
missed something. I have tested it to work also with Python 1.5.2.
Let me know if you have any doubts about it.
Regards,
Pearu
-------------- next part --------------
#!/usr/bin/env python
# Direct usage (only for testing):
# calc_cvs_version.py <full_path_to_cvs_tree>
# Usage from CVS tree:
# 1) Copy this file to $CVSROOT/CVSROOT
# 2) Add the following line to $CVSROOT/CVSROOT/loginfo file:
# dir/modulename (/full/path/to/python $CVSROOT/CVSROOT/calc_cvs_version.py $CVSROOT/dir/modulename)
# Make sure that `python' is a full path to system python executable.
# Result:
# Creates CVS formatted python file
# <full_path_to_cvs_tree>/__cvs_version__.py,v
# that contains the assignment of 3-tuple:
# cvs_version = (<cvs_minor>,<cvs_micro>,<cvs_serial>)
# Author:
# Pearu Peterson <pearu at cens.ioc.ee>
# Permission to use, modify, and distribute this software is given under the
# terms of the LGPL. See http://www.fsf.org
# NO WARRANTY IS EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
import sys
import os
import string
if len(sys.argv)!=2: sys.exit()
cvs_path = os.path.abspath(sys.argv[1])
def visit_cvs_tree(cvs_version,dirname,names):
try: names.remove('Attic')
except ValueError: pass
for name in filter(lambda n:n[-2:]==',v',names):
if name=='__cvs_version__.py,v': continue
f = open(os.path.join(dirname,name),'r')
rev_numbers_str = string.split(f.readline())[1][:-1]
f.close()
rev_numbers = map(eval,string.split(rev_numbers_str,'.'))
if len(rev_numbers)>1:
cvs_version[-1] = cvs_version[-1] + rev_numbers[-1]
cvs_version[-2] = cvs_version[-2] + rev_numbers[-2]
cvs_version_py_tmpl = """\
head #revision#;
access;
symbols;
locks; strict;
comment @# @;
#revision#
date 2002.02.19.18.41.34; author pearu; state Exp;
branches;
next ;
desc
@@
#revision#
log
@__cvs_version__.py
@
text
@### DO NOT EDIT THIS FILE!!!
### DO NOT TRY TO COMMIT THIS FILE TO CVS REPOSITORY!!!
cvs_version = (#version#)
@
"""
cvs_version_fname = os.path.join(cvs_path,'__cvs_version__.py,v')
###### Get previous version ######
if os.path.isfile(cvs_version_fname):
f = open(cvs_version_fname,'r')
rev_numbers_str = string.split(f.readline())[1][:-1]
f.close()
prev_rev_numbers = map(eval,string.split(rev_numbers_str,'.'))
while len(prev_rev_numbers)<4:
prev_rev_numbers = [1] + rev_numbers
else:
prev_rev_numbers = [1,1,0,0]
##### Calculate new version ######
rev_numbers = prev_rev_numbers[:2]+[0,0]
os.path.walk(cvs_path,visit_cvs_tree,rev_numbers)
##### Update version ######
if rev_numbers[-2] != prev_rev_numbers[-2]:
# E.g. a file have been added or removed.
rev_numbers[-3] = rev_numbers[-3] + 1
revision = string.join(map(str,rev_numbers),'.')
version = string.join(map(str,rev_numbers),',')
##### Create new file __cvs_version__.py,v ####
cvs_version_py = string.replace(cvs_version_py_tmpl,'#version#',version)
cvs_version_py = string.replace(cvs_version_py,'#revision#',revision)
if os.path.exists(cvs_version_fname):
os.remove(cvs_version_fname)
f = open(cvs_version_fname,'w')
f.write(cvs_version_py)
f.close()
os.chmod(cvs_version_fname, 0444)
#### EOF #####
More information about the SciPy-Dev
mailing list