def check(ip): svn_url = "svn://{0}".format(ip) etalon = [] with open(ETALON_FILENAME) as fn: for line in fn: etalon.append(json.loads(line)) svn = Svn(svn_url) rev = svn.info()["rev"] if rev != len(etalon) - 1: print "Wrong revisions number" sys.exit(STATUS_NOT_OK) for _ in xrange(ITERATIONS): et = random.choice(etalon) rev = et["rev"] files = et["files"] for r_file in svn.ls(rev=rev): #logging.info("Checking rev: %d, file '%s', size %d", rev, r_file["name"], r_file["size"]) if r_file["name"] not in files: print "File '{0}' in rev {1} should be deleted".format(r_file["name"], rev) sys.exit(STATUS_NOT_OK) e_file = files[r_file["name"]] if e_file["deleted"]: print "File '{0}' should be deleted in rev {1}".format(e_file["name"], rev) sys.exit(STATUS_NOT_OK)
def main(): logging.basicConfig(format="%(asctime)-15s:%(levelname)s:%(message)s", level=logging.INFO) if len(sys.argv) < 2: print >>sys.stderr, "Usage: {0} ip".format(sys.argv[0]) sys.exit(1) svn_url = sys.argv[1] svn = Svn(svn_url) max_rev = svn.info()["rev"] deleted_files = set() for rev in xrange(max_rev + 1): info = {} info["rev"] = rev files = {} for f in svn.ls(rev=rev): f["deleted"] = False if f["name"] in deleted_files or f["size"] > MAX_FILE_SIZE: deleted_files.add(f["name"]) f["deleted"] = True files[f["name"]] = f info["files"] = files print json.dumps(info)