def compare_deb_files(path1, path2, source=None): differences = [] # look up differences in content ar1 = ArFile(filename=path1) ar2 = ArFile(filename=path2) with make_temp_directory() as temp_dir1: with make_temp_directory() as temp_dir2: logger.debug('content1 %s', ar1.getnames()) logger.debug('content2 %s', ar2.getnames()) for name in sorted(set(ar1.getnames()) .intersection(ar2.getnames())): logger.debug('extract member %s', name) member1 = ar1.getmember(name) member2 = ar2.getmember(name) in_path1 = os.path.join(temp_dir1, name) in_path2 = os.path.join(temp_dir2, name) with open(in_path1, 'w') as f1: f1.write(member1.read()) with open(in_path2, 'w') as f2: f2.write(member2.read()) differences.extend( debbindiff.comparators.compare_files( in_path1, in_path2, source=name)) os.unlink(in_path1) os.unlink(in_path2) # look up differences in file list and file metadata content1 = get_ar_content(path1) content2 = get_ar_content(path2) difference = Difference.from_unicode( content1, content2, path1, path2, source="metadata") if difference: differences.append(difference) return differences
def compare_deb_files(path1, path2, source=None): differences = [] # look up differences in content ar1 = ArFile(filename=path1) ar2 = ArFile(filename=path2) with make_temp_directory() as temp_dir1: with make_temp_directory() as temp_dir2: logger.debug('content1 %s', ar1.getnames()) logger.debug('content2 %s', ar2.getnames()) for name in sorted( set(ar1.getnames()).intersection(ar2.getnames())): logger.debug('extract member %s', name) member1 = ar1.getmember(name) member2 = ar2.getmember(name) in_path1 = os.path.join(temp_dir1, name) in_path2 = os.path.join(temp_dir2, name) with open(in_path1, 'w') as f1: f1.write(member1.read()) with open(in_path2, 'w') as f2: f2.write(member2.read()) differences.extend( debbindiff.comparators.compare_files(in_path1, in_path2, source=name)) os.unlink(in_path1) os.unlink(in_path2) # look up differences in file list and file metadata content1 = get_ar_content(path1) content2 = get_ar_content(path2) difference = Difference.from_unicode(content1, content2, path1, path2, source="metadata") if difference: differences.append(difference) return differences
tree = ["Ubuntu","Sys","Data","Icons","BundleData"] for i in tree: os.mkdir(os.path.join(dirpath,i)) except: print "No write permissions. Quitting." fallback() # INHABIT try: arfile = ArFile(pkgfile) except: print "Could not read AR format. Quitting." fallback() try: debian_binary = arfile.getmember("debian-binary") x = open(os.path.join(dirpath,tree[0],"debian-binary"),"w") x.write(debian_binary.read()) x.close() except: print "Warning: Inconsistent package: Missing file debian-binary" pass try: if "control.tar.gz" in arfile.getnames(): sysobj = arfile.getmember("control.tar.gz") x = TarFile.gzopen(name="control.tar.gz",fileobj=sysobj,mode="r") else: sysobj = arfile.getmember("control.tar.bz2") x = TarFile.bz2open(name="control.tar.bz2",fileobj=sysobj,mode="r") x.extractall(os.path.join(dirpath,tree[1]))