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

65 lines
1.7 KiB

  1. #!/usr/bin/python
  2. from backup import hashify
  3. import argparse
  4. import os
  5. import shutil
  6. import sqlite3
  7. import time
  8. import time
  9. def create_temp_dir():
  10. name= 'fsb{}'.format(hex(time.time_ns())[2:])
  11. os.mkdir(name)
  12. return name
  13. def copy_file_temp(path):
  14. name= 'fsb{}'.format(hex(time.time_ns())[2:])
  15. os.copy(path,name)
  16. return name
  17. def super_rename(src,dst):
  18. parent =
  19. if not o
  20. def create_hash_lookup(top):
  21. hashes = hasifiy(top)
  22. ret = {}
  23. for _hash in hashes:
  24. path,*two_hashes = _hash
  25. ret.setdefault(two_hashes,[]).append(path)
  26. return ret
  27. def lookup(cur,imohash,realhash=None):
  28. if realhash is not None:
  29. cur.execute('SELECT path FROM paths where blake=?',[realhash])
  30. else:
  31. cur.execute('SELECT path FROM paths where imohash=?',[imohash])
  32. res = cur.fetchall()
  33. return res
  34. def restore(database,source,destination):
  35. con=sqlite3.connect(database)
  36. cur=con.cursor()
  37. temp = create_hash_lookup(source)
  38. hashes = hashify(source)
  39. for _hashes,paths in hashes.items():
  40. search_results = lookup(cur,*_hashes)
  41. ppath = os.path.join(source,path)
  42. qpath=lookup(cur,imohash,realhash)
  43. qpath=os.path.join(temp,qpath)
  44. parent = os.path.dirname(qpath)
  45. if not os.path.exists(parent):
  46. os.makedirs(parent)
  47. print(ppath,qpath,sep = '->')
  48. os.rename(ppath,qpath)
  49. os.rename(temp,destination)
  50. if __name__ == "__main__":
  51. parser = argparse.ArgumentParser()
  52. parser.add_argument('database')
  53. parser.add_argument('src')
  54. parser.add_argument('dst',default = None,nargs='?')
  55. args = parser.parse_args()
  56. if args.dst is None:
  57. args.dst=args.src
  58. restore(args.database,args.src,args.dst)