mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-24 13:18:07 -05: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>
94 lines
3.9 KiB
CMake
94 lines
3.9 KiB
CMake
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})
|