mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2026-02-05 14:25:55 +08:00
* Add ASSERT_CONTENTS_EQUAL test macro in testing.cmake Checks if the contents of a file matches the given input * Use shorter hashes with CPM_SOURCE_CACHE (#624) Uses shorter hashes with CPM_SOURCE_CACHE. Falls back to a longer hash if necessary (ie, if there's a collision with an existing hash). See: https://github.com/cpm-cmake/CPM.cmake/issues/624 * Update integration tests to support shorter hashes * trigger ci * run cmake-format * if already available, use the legacy cache hash * create temporary file in current binary dir * add test case for legacy hash --------- Co-authored-by: Lars Melchior <lars.melchior@gmail.com> Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
d7614381ab
commit
d9364ce284
@@ -75,6 +75,17 @@ class SourceCache < IntegrationTest
|
||||
assert_equal ver, package.ver
|
||||
expected_parent_dir = File.join(@cache_dir, name.downcase)
|
||||
assert package.src_dir.start_with?(expected_parent_dir), "#{package.src_dir} must be in #{expected_parent_dir}"
|
||||
assert_equal dir_sha1, File.basename(package.src_dir)
|
||||
|
||||
# The hash has been shortened by cpm_get_shortest_hash. The following
|
||||
# should hold:
|
||||
# - The short hash should be a prefix of the input hash
|
||||
# - There should be a file ".../${short_hash}.hash" which matches the full hash
|
||||
short_hash = File.basename(package.src_dir)
|
||||
assert dir_sha1.start_with?(short_hash), "short_hash should be a prefix of dir_sha1"
|
||||
|
||||
# Check that the full hash is stored in the .hash file
|
||||
hash_file = "#{package.src_dir}.hash"
|
||||
assert File.exist?(hash_file), "Hash file #{hash_file} should exist"
|
||||
assert_equal dir_sha1, File.read(hash_file), "Hash file should contain the full original hash"
|
||||
end
|
||||
end
|
||||
|
||||
93
test/unit/get_shortest_hash.cmake
Normal file
93
test/unit/get_shortest_hash.cmake
Normal file
@@ -0,0 +1,93 @@
|
||||
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||||
|
||||
include(${CPM_PATH}/CPM.cmake)
|
||||
include(${CPM_PATH}/testing.cmake)
|
||||
|
||||
# Random suffix
|
||||
string(
|
||||
RANDOM
|
||||
LENGTH 6
|
||||
ALPHABET "0123456789abcdef" tmpdir_suffix
|
||||
)
|
||||
|
||||
# Seconds since epoch
|
||||
string(TIMESTAMP tmpdir_base "%s" UTC)
|
||||
|
||||
set(tmp "${CMAKE_CURRENT_BINARY_DIR}/get_shortest_hash-${tmpdir_base}-${tmpdir_suffix}")
|
||||
|
||||
if(IS_DIRECTORY ${tmp})
|
||||
message(FATAL_ERROR "Test directory ${tmp} already exists")
|
||||
endif()
|
||||
|
||||
file(MAKE_DIRECTORY "${tmp}")
|
||||
|
||||
# 1. Sanity check: none of these directories should exist yet
|
||||
|
||||
assert_not_exists(${tmp}/cccb.hash)
|
||||
assert_not_exists(${tmp}/cccb77ae.hash)
|
||||
assert_not_exists(${tmp}/cccb77ae9609.hash)
|
||||
assert_not_exists(${tmp}/cccb77ae9608.hash)
|
||||
assert_not_exists(${tmp}/cccb77be.hash)
|
||||
|
||||
# 1. The directory is empty, so it should get a 4-character hash
|
||||
cpm_get_shortest_hash(${tmp} "cccb77ae9609d2768ed80dd42cec54f77b1f1455" hash)
|
||||
assert_equal(${hash} "cccb")
|
||||
assert_contents_equal(${tmp}/cccb.hash cccb77ae9609d2768ed80dd42cec54f77b1f1455)
|
||||
|
||||
# 1. Calling the function with a new hash that differs subtly should result in more characters being
|
||||
# used, enough to uniquely identify the hash
|
||||
|
||||
cpm_get_shortest_hash(${tmp} "cccb77ae9609d2768ed80dd42cec54f77b1f1456" hash)
|
||||
assert_equal(${hash} "cccb77ae")
|
||||
assert_contents_equal(${tmp}/cccb77ae.hash cccb77ae9609d2768ed80dd42cec54f77b1f1456)
|
||||
|
||||
cpm_get_shortest_hash(${tmp} "cccb77ae9609d2768ed80dd42cec54f77b1f1457" hash)
|
||||
assert_equal(${hash} "cccb77ae9609")
|
||||
assert_contents_equal(${tmp}/cccb77ae9609.hash cccb77ae9609d2768ed80dd42cec54f77b1f1457)
|
||||
|
||||
cpm_get_shortest_hash(${tmp} "cccb77ae9608d2768ed80dd42cec54f77b1f1455" hash)
|
||||
assert_equal(${hash} "cccb77ae9608")
|
||||
assert_contents_equal(${tmp}/cccb77ae9608.hash cccb77ae9608d2768ed80dd42cec54f77b1f1455)
|
||||
|
||||
cpm_get_shortest_hash(${tmp} "cccb77be9609d2768ed80dd42cec54f77b1f1456" hash)
|
||||
assert_equal(${hash} "cccb77be")
|
||||
assert_contents_equal(${tmp}/cccb77be.hash cccb77be9609d2768ed80dd42cec54f77b1f1456)
|
||||
|
||||
# check that legacy hashs are recognized
|
||||
file(MAKE_DIRECTORY "${tmp}/cccb77be9609d2768ed80dd42cec54f77b1f1457")
|
||||
cpm_get_shortest_hash(${tmp} "cccb77be9609d2768ed80dd42cec54f77b1f1457" hash)
|
||||
assert_equal(${hash} "cccb77be9609d2768ed80dd42cec54f77b1f1457")
|
||||
|
||||
# 1. The old file should still exist, and have the same content
|
||||
assert_contents_equal(${tmp}/cccb.hash cccb77ae9609d2768ed80dd42cec54f77b1f1455)
|
||||
assert_contents_equal(${tmp}/cccb77ae.hash cccb77ae9609d2768ed80dd42cec54f77b1f1456)
|
||||
assert_contents_equal(${tmp}/cccb77ae9609.hash cccb77ae9609d2768ed80dd42cec54f77b1f1457)
|
||||
assert_contents_equal(${tmp}/cccb77ae9608.hash cccb77ae9608d2768ed80dd42cec54f77b1f1455)
|
||||
assert_contents_equal(${tmp}/cccb77be.hash cccb77be9609d2768ed80dd42cec54f77b1f1456)
|
||||
|
||||
# 1. Confirm idempotence: calling any of these function should produce the same hash as before (hash
|
||||
# lookups work correctly once the .hash files are created)
|
||||
|
||||
cpm_get_shortest_hash(${tmp} "cccb77ae9609d2768ed80dd42cec54f77b1f1455" hash)
|
||||
assert_equal(${hash} "cccb")
|
||||
assert_contents_equal(${tmp}/cccb.hash cccb77ae9609d2768ed80dd42cec54f77b1f1455)
|
||||
|
||||
cpm_get_shortest_hash(${tmp} "cccb77ae9609d2768ed80dd42cec54f77b1f1456" hash)
|
||||
assert_equal(${hash} "cccb77ae")
|
||||
assert_contents_equal(${tmp}/cccb77ae.hash cccb77ae9609d2768ed80dd42cec54f77b1f1456)
|
||||
|
||||
cpm_get_shortest_hash(${tmp} "cccb77ae9609d2768ed80dd42cec54f77b1f1457" hash)
|
||||
assert_equal(${hash} "cccb77ae9609")
|
||||
assert_contents_equal(${tmp}/cccb77ae9609.hash cccb77ae9609d2768ed80dd42cec54f77b1f1457)
|
||||
|
||||
cpm_get_shortest_hash(${tmp} "cccb77ae9608d2768ed80dd42cec54f77b1f1455" hash)
|
||||
assert_equal(${hash} "cccb77ae9608")
|
||||
assert_contents_equal(${tmp}/cccb77ae9608.hash cccb77ae9608d2768ed80dd42cec54f77b1f1455)
|
||||
|
||||
cpm_get_shortest_hash(${tmp} "cccb77be9609d2768ed80dd42cec54f77b1f1456" hash)
|
||||
assert_equal(${hash} "cccb77be")
|
||||
assert_contents_equal(${tmp}/cccb77be.hash cccb77be9609d2768ed80dd42cec54f77b1f1456)
|
||||
|
||||
# 1. Cleanup - remove the temporary directory that we created
|
||||
|
||||
file(REMOVE_RECURSE ${tmp})
|
||||
Reference in New Issue
Block a user