1*b1cdbd2cSJim Jagielski#!/usr/bin/python 2*b1cdbd2cSJim Jagielski 3*b1cdbd2cSJim Jagielski#************************************************************** 4*b1cdbd2cSJim Jagielski# 5*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 6*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 7*b1cdbd2cSJim Jagielski# distributed with this work for additional information 8*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 9*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 10*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 11*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 12*b1cdbd2cSJim Jagielski# 13*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 14*b1cdbd2cSJim Jagielski# 15*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 16*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 17*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 19*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 20*b1cdbd2cSJim Jagielski# under the License. 21*b1cdbd2cSJim Jagielski# 22*b1cdbd2cSJim Jagielski#************************************************************** 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielskiimport os 25*b1cdbd2cSJim Jagielskiimport sys 26*b1cdbd2cSJim Jagielskiimport string 27*b1cdbd2cSJim Jagielskifrom os import path 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielskidef getCurrPath(): 30*b1cdbd2cSJim Jagielski currPath = sys.path[0] or os.getcwd() 31*b1cdbd2cSJim Jagielski currPath = path.abspath(currPath) 32*b1cdbd2cSJim Jagielski return currPath 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielskidef getCwsWorkStamp(): 35*b1cdbd2cSJim Jagielski cwsWorkStamp=os.getenv('CWS_WORK_STAMP') 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski if not cwsWorkStamp: 38*b1cdbd2cSJim Jagielski currPath=getCurrPath() 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski os.chdir(os.getenv('SOLARENV')) 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski (input, output) = os.popen4("svn info") 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski for outline in output.readlines(): 45*b1cdbd2cSJim Jagielski if outline.startswith("URL:"): 46*b1cdbd2cSJim Jagielski cwsWorkStamp = outline[outline.index("svn.services"):outline.index("solenv")-1] 47*b1cdbd2cSJim Jagielski cwsWorkStamp = cwsWorkStamp[cwsWorkStamp.rfind("/")+1:len(cwsWorkStamp)] 48*b1cdbd2cSJim Jagielski break 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski os.putenv("CWS_WORK_STAMP",cwsWorkStamp); 51*b1cdbd2cSJim Jagielski os.chdir(currPath) 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski return string.strip(cwsWorkStamp) 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielskidef getMinor(cwsWorkStamp): 56*b1cdbd2cSJim Jagielski minor = os.getenv('UPDMINOR') 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski if not minor: 59*b1cdbd2cSJim Jagielski if (os.getenv('OSTYPE') == "cygwin"): 60*b1cdbd2cSJim Jagielski bash=os.getenv("SHELL") 61*b1cdbd2cSJim Jagielski (input, output) = os.popen4("cygpath -w "+bash) 62*b1cdbd2cSJim Jagielski winbash=string.strip(output.readlines()[0]) 63*b1cdbd2cSJim Jagielski cws=winbash+" -c 'cws query -c "+cwsWorkStamp+" current'" 64*b1cdbd2cSJim Jagielski else: 65*b1cdbd2cSJim Jagielski cws="cws query -c "+cwsWorkStamp+" current" 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski (input, output) = os.popen4(cws) 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski found=0 70*b1cdbd2cSJim Jagielski for outline in output.readlines(): 71*b1cdbd2cSJim Jagielski if found: 72*b1cdbd2cSJim Jagielski minor=outline 73*b1cdbd2cSJim Jagielski break 74*b1cdbd2cSJim Jagielski elif outline.find("Current milestone:") != -1: 75*b1cdbd2cSJim Jagielski found=1 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski return string.strip(minor) 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielskiworkstamp = os.getenv('WORK_STAMP') 81*b1cdbd2cSJim Jagielskisolenv= os.getenv('SOLARENV') 82*b1cdbd2cSJim JagielskicwsWorkStamp=getCwsWorkStamp() 83*b1cdbd2cSJim Jagielskiminor = getMinor(cwsWorkStamp) 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim JagielskioldWorkStamp = workstamp + "_" + minor 86*b1cdbd2cSJim Jagielskidiff="svn diff --summarize --old=svn://svn.services.openoffice.org/ooo/tags/"+oldWorkStamp+" --new=svn://svn.services.openoffice.org/ooo/cws/"+cwsWorkStamp 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielskimodules=[] 89*b1cdbd2cSJim Jagielski(input, output) = os.popen4(diff) 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielskifor outline in output.readlines(): 92*b1cdbd2cSJim Jagielski if outline.find("svn://svn.services.openoffice.org"): 93*b1cdbd2cSJim Jagielski index = outline.index(oldWorkStamp)+len(oldWorkStamp)+1 94*b1cdbd2cSJim Jagielski newModule="" 95*b1cdbd2cSJim Jagielski if outline.find("/",index) != -1: 96*b1cdbd2cSJim Jagielski # seems to be a file 97*b1cdbd2cSJim Jagielski newModule=string.strip(outline[index:outline.index("/",index)]) 98*b1cdbd2cSJim Jagielski else: 99*b1cdbd2cSJim Jagielski #seems to be a folder 100*b1cdbd2cSJim Jagielski if len(outline[index:]) > 0: 101*b1cdbd2cSJim Jagielski newModule=string.strip(outline[index:]) 102*b1cdbd2cSJim Jagielski if newModule != "" and not modules.count(newModule): 103*b1cdbd2cSJim Jagielski modules.append(newModule) 104*b1cdbd2cSJim Jagielski 105*b1cdbd2cSJim Jagielskifor module in modules: 106*b1cdbd2cSJim Jagielski print(module) 107