blob: 81dad955f8e5fc33113eae303478d0bf054275b0 [file] [log] [blame]
#########################################################################################
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#########################################################################################
import os
import hashlib
import datetime
from os.path import join, splitext
class Scanner:
'''
Scans a directory tree.
Calculates sums.
Outputs xml to stdout.
'''
def __init__(self, basedir):
self.basedir = basedir
def scan(self):
result = "<?xml version='1.0'?>\n<documents basedir='" + self.basedir + "' at='"
result = result + datetime.datetime.utcnow().isoformat() + "'>\n"
for root, dirs, files in os.walk(self.basedir):
for name in files:
path = join(root, name)
ext = splitext(name)[1]
if name == 'KEYS':
pass
elif not (ext == '.sha1' or ext == '.md5' or ext=='.sha' or ext == '.asc'):
file = open(path, mode='rb')
md5 = hashlib.md5()
sha = hashlib.sha512()
ripe = hashlib.new('ripemd160')
more = True
while more:
content = file.read(4048)
if content == '':
more = False
else:
md5.update(content)
sha.update(content)
ripe.update(content)
file.close()
result = result + " <document dir='" + root + "' name='" + name + "' >\n"
result = result + " <md5>" + md5.hexdigest() + "</md5>\n"
result = result + " <sha512>" + sha.hexdigest() + "</sha512>\n"
result = result + " <ripemd160>" + ripe.hexdigest() + "</ripemd160>\n"
result = result + " </document>\n"
if '.svn' in dirs:
dirs.remove('.svn')
result = result + "</documents>"
return result
def scanIncubatorReleases():
scanner = Scanner('/www/www.apache.org/dist/incubator')
print scanner.scan()
scanner = Scanner('/www/archive.apache.org/dist/incubator')
print scanner.scan()
if __name__ == '__main__':
scanIncubatorReleases()