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:
parent
7543ae540b
commit
c0f90ee65a
|
@ -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)
|
||||
|
|
|
@ -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"]
|
Loading…
Reference in New Issue