state: don't forget to compute size of an individual file

Fixes #1488

Signed-off-by: Ruslan Kuprieiev <[email protected]>
This commit is contained in:
Ruslan Kuprieiev
2019-01-15 13:08:25 +02:00
parent 52ffae81c4
commit ced57a4382
2 changed files with 13 additions and 2 deletions
+4 -1
View File
@@ -245,10 +245,10 @@ class State(object):
@staticmethod
def mtime_and_size(path):
size = 0
mtime = os.path.getmtime(path)
if os.path.isdir(path):
size = 0
for root, dirs, files in os.walk(path):
for dname in dirs:
p = os.path.join(root, dname)
@@ -263,6 +263,9 @@ class State(object):
m = st.st_mtime
if m > mtime:
mtime = m
else:
size = os.path.getsize(path)
# 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)
+9 -1
View File
@@ -1,13 +1,21 @@
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)
+ 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))