95 lines
3.2 KiB
Python
95 lines
3.2 KiB
Python
##############################################################################
|
|
# Copyright (c) 2013-2018, Lawrence Livermore National Security, LLC.
|
|
# Produced at the Lawrence Livermore National Laboratory.
|
|
#
|
|
# This file is part of Spack.
|
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
|
# LLNL-CODE-647188
|
|
#
|
|
# For details, see https://github.com/spack/spack
|
|
# Please also see the NOTICE and LICENSE files for our notice and the LGPL.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU Lesser General Public License (as
|
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
|
#
|
|
# This program 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 terms and
|
|
# conditions of the GNU Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
##############################################################################
|
|
import os
|
|
|
|
import pytest
|
|
|
|
from llnl.util.filesystem import working_dir, join_path, touch
|
|
|
|
import spack
|
|
import spack.config
|
|
from spack.spec import Spec
|
|
from spack.version import ver
|
|
from spack.util.executable import which
|
|
|
|
|
|
pytestmark = pytest.mark.skipif(
|
|
not which('hg'), reason='requires mercurial to be installed')
|
|
|
|
|
|
@pytest.mark.parametrize("type_of_test", ['default', 'rev0'])
|
|
@pytest.mark.parametrize("secure", [True, False])
|
|
def test_fetch(
|
|
type_of_test,
|
|
secure,
|
|
mock_hg_repository,
|
|
config,
|
|
refresh_builtin_mock
|
|
):
|
|
"""Tries to:
|
|
|
|
1. Fetch the repo using a fetch strategy constructed with
|
|
supplied args (they depend on type_of_test).
|
|
2. Check if the test_file is in the checked out repository.
|
|
3. Assert that the repository is at the revision supplied.
|
|
4. Add and remove some files, then reset the repo, and
|
|
ensure it's all there again.
|
|
"""
|
|
# Retrieve the right test parameters
|
|
t = mock_hg_repository.checks[type_of_test]
|
|
h = mock_hg_repository.hash
|
|
|
|
# Construct the package under test
|
|
spec = Spec('hg-test')
|
|
spec.concretize()
|
|
pkg = spack.repo.get(spec)
|
|
pkg.versions[ver('hg')] = t.args
|
|
|
|
# Enter the stage directory and check some properties
|
|
with pkg.stage:
|
|
with spack.config.override('config:verify_ssl', secure):
|
|
pkg.do_stage()
|
|
|
|
with working_dir(pkg.stage.source_path):
|
|
assert h() == t.revision
|
|
|
|
file_path = join_path(pkg.stage.source_path, t.file)
|
|
assert os.path.isdir(pkg.stage.source_path)
|
|
assert os.path.isfile(file_path)
|
|
|
|
os.unlink(file_path)
|
|
assert not os.path.isfile(file_path)
|
|
|
|
untracked_file = 'foobarbaz'
|
|
touch(untracked_file)
|
|
assert os.path.isfile(untracked_file)
|
|
pkg.do_restage()
|
|
assert not os.path.isfile(untracked_file)
|
|
|
|
assert os.path.isdir(pkg.stage.source_path)
|
|
assert os.path.isfile(file_path)
|
|
|
|
assert h() == t.revision
|