pmb/helpers/repo.py: Diff ofthe package repo works properly now.

Previously, it would always report all files as new files, although
some of them may not have changed. I've added testcases for the
repo functions.
This commit is contained in:
Oliver Smith 2017-06-14 19:48:23 +02:00
parent 7543ae540b
commit c0f90ee65a
No known key found for this signature in database
GPG Key ID: 5AE7F5513E0885CB
2 changed files with 97 additions and 2 deletions

View File

@ -53,8 +53,16 @@ def diff(args, files_a, files_b=None):
ret = []
for arch in files_b.keys():
for file, timestamp in files_b[arch].items():
if (arch not in files_a or file not in files_a[arch] or
timestamp is not files_a[arch][file]):
add = False
if arch not in files_a:
add = True
elif file not in files_a[arch]:
add = True
elif timestamp != files_a[arch][file]:
add = True
if add:
ret.append(arch + "/" + file)
return sorted(ret)

87
test/repo.py Normal file
View File

@ -0,0 +1,87 @@
"""
Copyright 2017 Oliver Smith
This file is part of pmbootstrap.
pmbootstrap is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
pmbootstrap is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pmbootstrap. If not, see <http://www.gnu.org/licenses/>.
"""
import os
import sys
import pytest
import types
import pathlib
import time
# Import from parent directory
pmb_src = os.path.abspath(os.path.join(os.path.dirname(__file__) + "/.."))
sys.path.append(pmb_src)
import pmb.helpers.repo
@pytest.fixture
def args(request, tmpdir):
args = types.SimpleNamespace()
args.work = str(tmpdir)
return args
def clear_timestamps_from_files(files):
"""
Replace all last modified timestamps from pmb.helpers.repo.files() with
None. The files-parameter gets changed in place.
"""
for arch in files.keys():
for file in files[arch].keys():
files[arch][file] = None
def test_files_empty(args):
os.mkdir(args.work + "/packages")
assert pmb.helpers.repo.files(args) == {}
def test_files_not_empty(args):
pkgs = args.work + "/packages"
for dir in ["", "armhf", "x86_64"]:
os.mkdir(pkgs + "/" + dir)
open(pkgs+"/x86_64/test", "a").close()
files = pmb.helpers.repo.files(args)
clear_timestamps_from_files(files)
assert files == {"armhf": {}, "x86_64": {"test": None}}
def test_files_diff(args):
# Create x86_64/test, x86_64/test2
pkgs = args.work + "/packages"
for dir in ["", "x86_64"]:
os.mkdir(pkgs + "/" + dir)
for file in ["x86_64/test", "x86_64/test2"]:
open(pkgs + "/" + file, "a").close()
# First snapshot
first = pmb.helpers.repo.files(args)
# Change: x86_64/test (set the lastmod timestamp 5 seconds in the future)
mtime_old = os.path.getmtime(pkgs + "/x86_64/test")
time_new = time.time() + 5
os.utime(pkgs + "/x86_64/test", (time_new, time_new))
mtime_new = os.path.getmtime(pkgs + "/x86_64/test")
assert mtime_old != mtime_new
# Create: aarch64/test3, x86_64/test4
os.mkdir(pkgs + "/aarch64")
open(pkgs + "/aarch64/test3", "a").close()
open(pkgs + "/x86_64/test4", "a").close()
diff = pmb.helpers.repo.diff(args, first)
assert diff == ["aarch64/test3", "x86_64/test", "x86_64/test4"]