You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

213 lines
6.2 KiB
Python

#!/usr/local/bin/python3
##
# Syntax: categorize.py builds-directory
# Rebuild directories Latest, Date, Platform in builds-directory
# Caution: builds are expected in builds/all
##
import os
import sys
import shutil
import time
import datetime
import re
global TSformat
TSformat = '%Y:%m:%d_%H:%M:%S'
##
# get difference in seconds between two time stamps
def tsdiff(ts1,ts2):
global TSformat
# print(time.mktime(time.strptime(re.sub('\.[0-9]*','',ts1),TSformat)))
return abs( time.mktime(time.strptime(re.sub('\.[0-9]*','',ts1),TSformat)) \
- time.mktime(time.strptime(re.sub('\.[0-9]*','',ts2),TSformat)) \
)
def year_month(ts):
global TSformat
t=time.strptime(re.sub('\.[0-9]*','',ts),TSformat)
return str(t.tm_year)+':'+str(t.tm_mon)
def year_week(ts):
global TSformat
t=time.strptime(re.sub('\.[0-9]*','',ts),TSformat)
w=datetime.date(t.tm_year, t.tm_mon, t.tm_mday).isocalendar()[1]
return str(t.tm_year)+':'+str(w)
##
#
def mkdir(P):
if not os.path.exists(P):
os.makedirs(P)
##
##
#
def rmdir_mkdir(P):
if os.path.exists(P):
shutil.rmtree(P,ignore_errors=True)
mkdir(P)
##
##
#
def visitfile(file,path,myData):
"""visitfile - use by the directory walker"""
# print("file,path = " , file , " -> ",path)
global latest,sweep
global Platform, Version, Date, Monthly, Weekly
home = myData['home' ]
if os.path.isfile(path) and file.find('-') != -1:
# parse exiv2-0.27.0.1-CYGWIN-2018:10:19_01:13:00.tar.gz
# print('file = ' + file)
splits = file.split('-')
if file.find('MinGW') != -1:
platform = splits[2]+'-'+splits[3]
date = splits[4].split('.')[0]
version = splits[1]
else:
platform = splits[2]
date = splits[3].split('.')[0]
version = splits[1]
monthly= year_month(date)
weekly = year_week(date)
# print( "%s -> platform = %s version = %s date = %s " % (file , platform,version,date) )
myData ['platform'].add(platform)
myData ['date' ].add(date )
myData ['version' ].add(version )
myData ['weekly' ].add(monthly )
myData ['monthly' ].add(weekly )
if sweep==1:
Links = { Platform:platform, Date:date, Version:version, Monthly:monthly, Weekly:weekly }
for L in Links:
# path : all/exiv2-0.27.0.1-MSVC-2018:10:20_06:33:13.zip
# file : exiv2-0.27.0.1-MSVC-2018:10:20_06:33:13.zip
# L : /Users/rmills/Jenkins/builds/Platform
# Links[L]: MSVC
# Link : /Users/rmills/Jenkins/builds/Platform/MSVC
# file : exiv2-0.27.0.1-MSVC-2018:10:20_06:33:13.zip
# ls -s all/exiv2-0.27.0.1-MSVC-2018:10:20_06:33:13.zip \
# Platform/MSVC/exiv2-0.27.0.1-MSVC-2018:10:20_06:33:13.zip
Link=os.path.join(L,Links[L])
mkdir(Link)
os.symlink(path,os.path.join(Link,file))
if ( 1 == 2 ):
print('path : %s' % path )
print('file : %s' % file )
print('L : %s' % L )
print('Links[L]: %s' % Links[L])
print('Link : %s' % Link )
print('file : %s' % file )
print('ls -s %s %s' % (path,os.path.join(Link,file)) )
exit(0)
# print('latest? file = %s date = %s latest = %s DIFF = %d' % (file,date,latest_date,0)) # tsdiff(date,latest) ))
if tsdiff(date,latest) < 5:
# print('linking file = %s path = %s Latest = %s' % (file,path,Latest ))
os.symlink(path,os.path.join(Latest,file))
##
##
#
def searcher(home):
"""searcher - walk the tree"""
global latest,sweep
global Platform, Version, Latest, Date, Monthly, Weekly
print("home = " , home)
# recursive search
myData = {}
myData ['home' ]=os.path.abspath(home)
myData ['platform']=set()
myData ['version' ]=set()
myData ['date' ]=set()
myData ['monthly' ]=set()
myData ['weekly' ]=set()
for sweep in range(0,1+1):
# sweep == 0 : ignore links and populate myData
# sweep == 1 : create the new links
myData ['sweep' ]=sweep
for dir, subdirs, files in os.walk(os.path.join(home,'all')):
for file in files:
path = os.path.join(dir, file)
visitfile(file,path,myData)
platform = list(myData ['platform'])
platform.sort()
# print(platform)
date = list(myData ['date'])
date.sort()
date.reverse()
latest=date[0]
# print(date)
# print("setting latest = ",latest)
version = list(myData ['version'])
version.sort()
# print(version)
weekly = list(myData['weekly'])
weekly.sort()
# print(weekly)
monthly = list(myData['monthly'])
monthly.sort()
if sweep==0:
Platform = os.path.join(home,'Platform')
Date = os.path.join(home,'Date' )
Latest = os.path.join(home,'Latest' )
Version = os.path.join(home,"Version" )
Weekly = os.path.join(home,"Weekly" )
Monthly = os.path.join(home,"Monthly" )
Source = os.path.join(home,"Source" )
rmdir_mkdir(Platform)
rmdir_mkdir(Date )
rmdir_mkdir(Latest )
rmdir_mkdir(Version )
rmdir_mkdir(Weekly )
rmdir_mkdir(Monthly )
print("Latest: ",latest)
# ln -s Platform/Source Source
if ( os.path.exists(Source) ):
os.unlink (Source)
os.symlink(os.path.join(Platform,'Source'),Source )
# print(myData ['date' ])
##
def syntax(program):
print('syntax: %s path-to-builds' % (program) )
##
#
def main(argv):
"""main - main program of course"""
argc = len(argv)
if argc < 2:
syntax(argv[0])
return
searcher(argv[1])
##
#
if __name__ == '__main__':
main(sys.argv)
##
# That's all Folks!
##