leveldb support bzip2 compress
This commit is contained in:
@@ -8,12 +8,13 @@ from game_backuper.config import (
|
|||||||
from game_backuper.cml import Opts, OptAction
|
from game_backuper.cml import Opts, OptAction
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from os.path import exists, join, isdir
|
from os.path import exists, join, isdir
|
||||||
from os import mkdir, remove
|
from os import mkdir, remove, close
|
||||||
from game_backuper.file import new_file, copy_file, File, mkdir_for_file
|
from game_backuper.file import new_file, copy_file, File, mkdir_for_file
|
||||||
from game_backuper.filetype import FileType
|
from game_backuper.filetype import FileType
|
||||||
from game_backuper.restorer import RestoreTask
|
from game_backuper.restorer import RestoreTask
|
||||||
from game_backuper.file import remove_compress_files
|
from game_backuper.file import remove_compress_files
|
||||||
from game_backuper.compress import compress
|
from game_backuper.compress import compress
|
||||||
|
from tempfile import mkstemp
|
||||||
|
|
||||||
|
|
||||||
class BackupTask(Thread):
|
class BackupTask(Thread):
|
||||||
@@ -82,22 +83,42 @@ class BackupTask(Thread):
|
|||||||
ent = list_leveldb_entries(f.full_path, f.domains)
|
ent = list_leveldb_entries(f.full_path, f.domains)
|
||||||
stats = leveldb_stats(f.full_path, ent)
|
stats = leveldb_stats(f.full_path, ent)
|
||||||
ori = self.db.get_file(prog, f.name)
|
ori = self.db.get_file(prog, f.name)
|
||||||
|
c = f.compress_config
|
||||||
de = join(bp, f.name + ".db")
|
de = join(bp, f.name + ".db")
|
||||||
if ori is not None:
|
if ori is not None:
|
||||||
if ori.size == stats.size and ori.hash == stats.hash:
|
|
||||||
print(f'{prog}: Skip {f[0]}')
|
|
||||||
continue
|
|
||||||
if ori.type is None or ori.type != FileType.LEVELDB:
|
if ori.type is None or ori.type != FileType.LEVELDB:
|
||||||
pp = join(bp, ori.file)
|
pp = join(bp, ori.file)
|
||||||
if exists(pp):
|
if exists(pp):
|
||||||
remove(pp)
|
remove(pp)
|
||||||
|
remove_compress_files(pp, prog, f.name)
|
||||||
self.db.remove_file(ori)
|
self.db.remove_file(ori)
|
||||||
ori = None
|
ori = None
|
||||||
if exists(de):
|
if ori is not None:
|
||||||
remove(de)
|
if ori.size == stats.size and ori.hash == stats.hash:
|
||||||
|
if c is None:
|
||||||
|
if exists(de):
|
||||||
|
print(f'{prog}: Skip {f[0]}')
|
||||||
|
remove_compress_files(de, prog, f.name)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
if exists(de + c.ext):
|
||||||
|
print(f'{prog}: Skip {f.name}')
|
||||||
|
remove_compress_files(de, prog, f.name, c.ext)
|
||||||
|
continue
|
||||||
mkdir_for_file(de)
|
mkdir_for_file(de)
|
||||||
leveldb_to_sqlite(f.full_path, de, ent)
|
if c is None:
|
||||||
print(f'{prog}: Covert leveldb done. {f.full_path}({f.name}) -> {de}') # noqa: E501
|
leveldb_to_sqlite(f.full_path, de, ent)
|
||||||
|
print(f'{prog}: Covert leveldb done. {f.full_path}({f.name}) -> {de}') # noqa: E501
|
||||||
|
remove_compress_files(de, prog, f.name)
|
||||||
|
else:
|
||||||
|
tmp = mkstemp()
|
||||||
|
close(tmp[0])
|
||||||
|
tmp = tmp[1]
|
||||||
|
leveldb_to_sqlite(f.full_path, tmp, ent)
|
||||||
|
print(f'{prog}: Covert leveldb done. {f.full_path}({f.name}) -> {tmp}') # noqa: E501
|
||||||
|
compress(tmp, de, c, f.name, prog)
|
||||||
|
remove(tmp)
|
||||||
|
print(f'{prog}: Removed tempfile {tmp}')
|
||||||
if ori is None:
|
if ori is None:
|
||||||
nf = File(None, f.name, stats.size, prog, stats.hash,
|
nf = File(None, f.name, stats.size, prog, stats.hash,
|
||||||
FileType.LEVELDB)
|
FileType.LEVELDB)
|
||||||
|
|||||||
@@ -9,9 +9,10 @@ from game_backuper.file import (
|
|||||||
new_file,
|
new_file,
|
||||||
mkdir_for_file,
|
mkdir_for_file,
|
||||||
)
|
)
|
||||||
from os import remove
|
from os import remove, close
|
||||||
from game_backuper.filetype import FileType
|
from game_backuper.filetype import FileType
|
||||||
from game_backuper.compress import decompress
|
from game_backuper.compress import decompress
|
||||||
|
from tempfile import mkstemp
|
||||||
|
|
||||||
|
|
||||||
class RestoreTask(Thread):
|
class RestoreTask(Thread):
|
||||||
@@ -65,13 +66,14 @@ class RestoreTask(Thread):
|
|||||||
raise ValueError('Type dismatched.')
|
raise ValueError('Type dismatched.')
|
||||||
nam = r.real_name
|
nam = r.real_name
|
||||||
src = join(self.cfg.dest, prog, fn + '.db')
|
src = join(self.cfg.dest, prog, fn + '.db')
|
||||||
|
c = r.compress_config
|
||||||
if isabs(r.path):
|
if isabs(r.path):
|
||||||
dest = r.path
|
dest = r.path
|
||||||
else:
|
else:
|
||||||
dest = join(b, r.path)
|
dest = join(b, r.path)
|
||||||
if dest in pl:
|
if dest in pl:
|
||||||
pl.remove(dest)
|
pl.remove(dest)
|
||||||
if not exists(src):
|
if (c is None and not exists(src)) or (c is not None and not exists(src + c.ext)): # noqa: E501
|
||||||
print(f'{prog}: Warn: Can not find backup files: "{src}"({fn})') # noqa: E501
|
print(f'{prog}: Warn: Can not find backup files: "{src}"({fn})') # noqa: E501
|
||||||
continue
|
continue
|
||||||
from game_backuper.leveldb import (
|
from game_backuper.leveldb import (
|
||||||
@@ -86,8 +88,18 @@ class RestoreTask(Thread):
|
|||||||
print(f'{prog}: Skip {fn}')
|
print(f'{prog}: Skip {fn}')
|
||||||
continue
|
continue
|
||||||
mkdir_for_file(dest)
|
mkdir_for_file(dest)
|
||||||
sqlite_to_leveldb(src, dest, r.domains)
|
if c is None:
|
||||||
print(f'{prog}: Covert leveldb done. {src}({fn}) -> {dest}')
|
sqlite_to_leveldb(src, dest, r.domains)
|
||||||
|
print(f'{prog}: Covert leveldb done. {src}({fn}) -> {dest}') # noqa: E501
|
||||||
|
else:
|
||||||
|
tmp = mkstemp()
|
||||||
|
close(tmp[0])
|
||||||
|
tmp = tmp[1]
|
||||||
|
decompress(src, tmp, c, fn, prog)
|
||||||
|
sqlite_to_leveldb(tmp, dest, r.domains)
|
||||||
|
print(f'{prog}: Covert leveldb done. {tmp}({fn}) -> {dest}') # noqa: E501
|
||||||
|
remove(tmp)
|
||||||
|
print(f'{prog}: Removed tempfile {tmp}')
|
||||||
for i in pl:
|
for i in pl:
|
||||||
if isfile(i):
|
if isfile(i):
|
||||||
remove(i)
|
remove(i)
|
||||||
|
|||||||
Reference in New Issue
Block a user