mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 17:12:13 -06:00
indicate version history in the browser
This commit is contained in:
parent
1cc8b873d4
commit
2f09c62c4e
|
@ -604,10 +604,10 @@ class HttpCli(object):
|
||||||
self.reply(response.encode("utf-8"))
|
self.reply(response.encode("utf-8"))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
fn = os.path.join(vfs.realpath, rem)
|
fp = os.path.join(vfs.realpath, rem)
|
||||||
srv_lastmod = -1
|
srv_lastmod = -1
|
||||||
try:
|
try:
|
||||||
st = os.stat(fsenc(fn))
|
st = os.stat(fsenc(fp))
|
||||||
srv_lastmod = st.st_mtime
|
srv_lastmod = st.st_mtime
|
||||||
srv_lastmod3 = int(srv_lastmod * 1000)
|
srv_lastmod3 = int(srv_lastmod * 1000)
|
||||||
except OSError as ex:
|
except OSError as ex:
|
||||||
|
@ -635,16 +635,22 @@ class HttpCli(object):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# TODO another hack re: pending permissions rework
|
# TODO another hack re: pending permissions rework
|
||||||
os.rename(fn, "{}.bak-{:.3f}.md".format(fn[:-3], srv_lastmod))
|
mdir, mfile = os.path.split(fp)
|
||||||
|
mfile2 = "{}.{:.3f}.md".format(mfile[:-3], srv_lastmod)
|
||||||
|
try:
|
||||||
|
os.mkdir(os.path.join(mdir, ".hist"))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
os.rename(fp, os.path.join(mdir, ".hist", mfile2))
|
||||||
|
|
||||||
p_field, _, p_data = next(self.parser.gen)
|
p_field, _, p_data = next(self.parser.gen)
|
||||||
if p_field != "body":
|
if p_field != "body":
|
||||||
raise Pebkac(400, "expected body, got {}".format(p_field))
|
raise Pebkac(400, "expected body, got {}".format(p_field))
|
||||||
|
|
||||||
with open(fn, "wb") as f:
|
with open(fp, "wb") as f:
|
||||||
sz, sha512, _ = hashcopy(self.conn, p_data, f)
|
sz, sha512, _ = hashcopy(self.conn, p_data, f)
|
||||||
|
|
||||||
new_lastmod = os.stat(fsenc(fn)).st_mtime
|
new_lastmod = os.stat(fsenc(fp)).st_mtime
|
||||||
new_lastmod3 = int(new_lastmod * 1000)
|
new_lastmod3 = int(new_lastmod * 1000)
|
||||||
sha512 = sha512[:56]
|
sha512 = sha512[:56]
|
||||||
|
|
||||||
|
@ -913,12 +919,30 @@ class HttpCli(object):
|
||||||
fsroot, vfs_ls, vfs_virt = vn.ls(rem, self.uname)
|
fsroot, vfs_ls, vfs_virt = vn.ls(rem, self.uname)
|
||||||
vfs_ls.extend(vfs_virt.keys())
|
vfs_ls.extend(vfs_virt.keys())
|
||||||
|
|
||||||
|
# check for old versions of files,
|
||||||
|
hist = {} # [num-backups, most-recent, hist-path]
|
||||||
|
histdir = os.path.join(fsroot, ".hist")
|
||||||
|
ptn = re.compile(r"(.*)\.([0-9]+\.[0-9]{3})(\.[^\.]+)$")
|
||||||
|
try:
|
||||||
|
for hfn in os.listdir(histdir):
|
||||||
|
m = ptn.match(hfn)
|
||||||
|
if not m:
|
||||||
|
continue
|
||||||
|
|
||||||
|
fn = m.group(1) + m.group(3)
|
||||||
|
n, ts, _ = hist.get(fn, [0, 0, ""])
|
||||||
|
hist[fn] = [n + 1, max(ts, float(m.group(2))), hfn]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
dirs = []
|
dirs = []
|
||||||
files = []
|
files = []
|
||||||
for fn in exclude_dotfiles(vfs_ls):
|
for fn in exclude_dotfiles(vfs_ls):
|
||||||
|
base = ""
|
||||||
href = fn
|
href = fn
|
||||||
if self.absolute_urls and vpath:
|
if self.absolute_urls and vpath:
|
||||||
href = "/" + vpath + "/" + fn
|
base = "/" + vpath + "/"
|
||||||
|
href = base + fn
|
||||||
|
|
||||||
if fn in vfs_virt:
|
if fn in vfs_virt:
|
||||||
fspath = vfs_virt[fn].realpath
|
fspath = vfs_virt[fn].realpath
|
||||||
|
@ -935,6 +959,10 @@ class HttpCli(object):
|
||||||
if is_dir:
|
if is_dir:
|
||||||
margin = "DIR"
|
margin = "DIR"
|
||||||
href += "/"
|
href += "/"
|
||||||
|
elif fn in hist:
|
||||||
|
margin = '<a href="{}.hist/{}">#{}</a>'.format(
|
||||||
|
base, html_escape(hist[fn][2], quote=True), hist[fn][0]
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
margin = "-"
|
margin = "-"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue