Merge pull request #1502 from efiop/1488

state: don't forget to compute size of an individual file
This commit is contained in:
Ruslan Kuprieiev
2019-01-15 18:22:12 +02:00
committed by GitHub
2 changed files with 15 additions and 10 deletions
+4 -9
View File
@@ -245,24 +245,19 @@ class State(object):
@staticmethod
def mtime_and_size(path):
size = 0
size = os.path.getsize(path)
mtime = os.path.getmtime(path)
if os.path.isdir(path):
for root, dirs, files in os.walk(path):
for dname in dirs:
p = os.path.join(root, dname)
m = os.path.getmtime(p)
if m > mtime:
mtime = m
for fname in files:
p = os.path.join(root, fname)
for name in dirs + files:
p = os.path.join(root, name)
st = os.stat(p)
size += st.st_size
m = st.st_mtime
if m > mtime:
mtime = m
# State of files handled by dvc is stored in db as TEXT.
# We cast results to string for later comparisons with stored values.
return str(int(nanotime.timestamp(mtime))), str(size)
+11 -1
View File
@@ -1,13 +1,23 @@
import os
from dvc.state import State
from tests.basic_env import TestDvc
class TestMtimeAndSizeReturnType(TestDvc):
class TestMtimeAndSize(TestDvc):
def test(self):
file_time, file_size = State.mtime_and_size(self.DATA)
dir_time, dir_size = State.mtime_and_size(self.DATA_DIR)
actual_file_size = os.path.getsize(self.DATA)
actual_dir_size = (os.path.getsize(self.DATA_DIR)
+ os.path.getsize(self.DATA)
+ os.path.getsize(self.DATA_SUB_DIR)
+ os.path.getsize(self.DATA_SUB))
self.assertIs(type(file_time), str)
self.assertIs(type(file_size), str)
self.assertEqual(file_size, str(actual_file_size))
self.assertIs(type(dir_time), str)
self.assertIs(type(dir_size), str)
self.assertEqual(dir_size, str(actual_dir_size))