Accepting request 850371 from devel:tools:building

OBS-URL: https://build.opensuse.org/request/show/850371
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ccache?expand=0&rev=56
This commit is contained in:
Dominique Leuenberger 2020-11-25 18:27:22 +00:00 committed by Git OBS Bridge
commit 8271990a18
7 changed files with 59 additions and 205 deletions

View File

@ -1,172 +0,0 @@
From bf47731a54561497e0c4cfcc8c0bf4242a6fe43e Mon Sep 17 00:00:00 2001
From: Sumit Jamgade <sjamgade@suse.com>
Date: Mon, 22 Jun 2020 12:52:33 +0200
Subject: [PATCH] Add another cleanup mechanism - evict-older-than
The argument adds another mechanism to control contents of cache directory. And
is based on the LRU tracking behaviour.
As of now there is no way for ccache to eliminate files which were
are no longer needed. As a result these files stay and are kept around until
either max_files/max_size is reached.
If a particular project is being built regularly but for some reason is allowed
to grow in size, then under such circumstances using the LRU mechanism to control
cache size, lends as perfect solution.
The argument takes a parameter N and performs a cleanup.
While performing cleanup the oldest file in ccache can
only be N seconds old. However this cleanup will not take max_files and
max_old into consideration
---
src/ccache.c | 43 ++++++++++++++++++++++++++++---------------
src/ccache.h | 1 +
src/cleanup.c | 16 +++++++++++++++-
test/suites/cleanup.bash | 11 +++++++++++
4 files changed, 55 insertions(+), 16 deletions(-)
diff --git a/src/ccache.c b/src/ccache.c
index 0e66468..0db96e1 100644
--- a/src/ccache.c
+++ b/src/ccache.c
@@ -64,6 +64,8 @@ static const char USAGE_TEXT[] =
" (normally not needed as this is done\n"
" automatically)\n"
" -C, --clear clear the cache completely (except configuration)\n"
+ " -e, --evict-older-than N delete files older than N seconds (this will not\n"
+ " take max_files, max_size into consideration)\n"
" -F, --max-files=N set maximum number of files in cache to N (use 0\n"
" for no limit)\n"
" -M, --max-size=SIZE set maximum size of cache to SIZE (use 0 for no\n"
@@ -4164,25 +4166,26 @@ ccache_main_options(int argc, char *argv[])
PRINT_STATS,
};
static const struct option options[] = {
- {"cleanup", no_argument, 0, 'c'},
- {"clear", no_argument, 0, 'C'},
- {"dump-manifest", required_argument, 0, DUMP_MANIFEST},
- {"get-config", required_argument, 0, 'k'},
- {"hash-file", required_argument, 0, HASH_FILE},
- {"help", no_argument, 0, 'h'},
- {"max-files", required_argument, 0, 'F'},
- {"max-size", required_argument, 0, 'M'},
- {"print-stats", no_argument, 0, PRINT_STATS},
- {"set-config", required_argument, 0, 'o'},
- {"show-config", no_argument, 0, 'p'},
- {"show-stats", no_argument, 0, 's'},
- {"version", no_argument, 0, 'V'},
- {"zero-stats", no_argument, 0, 'z'},
+ {"cleanup", no_argument, 0, 'c'},
+ {"clear", no_argument, 0, 'C'},
+ {"evict-older-than", required_argument, 0, 'e'},
+ {"dump-manifest", required_argument, 0, DUMP_MANIFEST},
+ {"get-config", required_argument, 0, 'k'},
+ {"hash-file", required_argument, 0, HASH_FILE},
+ {"help", no_argument, 0, 'h'},
+ {"max-files", required_argument, 0, 'F'},
+ {"max-size", required_argument, 0, 'M'},
+ {"print-stats", no_argument, 0, PRINT_STATS},
+ {"set-config", required_argument, 0, 'o'},
+ {"show-config", no_argument, 0, 'p'},
+ {"show-stats", no_argument, 0, 's'},
+ {"version", no_argument, 0, 'V'},
+ {"zero-stats", no_argument, 0, 'z'},
{0, 0, 0, 0}
};
int c;
- while ((c = getopt_long(argc, argv, "cCk:hF:M:po:sVz", options, NULL))
+ while ((c = getopt_long(argc, argv, "cCe:k:hF:M:po:sVz", options, NULL))
!= -1) {
switch (c) {
case DUMP_MANIFEST:
@@ -4223,6 +4226,16 @@ ccache_main_options(int argc, char *argv[])
printf("Cleared cache\n");
break;
+ case 'e': // --evict-older-than
+ initialize();
+ int32_t seconds = atoi(optarg);
+ if (seconds < 0) {
+ fatal("seconds cannot be negative: %d", seconds);
+ }
+ clean_old(conf, (time_t)seconds);
+ printf("Cleared old files\n");
+ break;
+
case 'h': // --help
fputs(USAGE_TEXT, stdout);
x_exit(0);
diff --git a/src/ccache.h b/src/ccache.h
index 0d6be60..3f6c44b 100644
--- a/src/ccache.h
+++ b/src/ccache.h
@@ -247,6 +247,7 @@ void exitfn_call(void);
void clean_up_dir(struct conf *conf, const char *dir, double limit_multiple);
void clean_up_all(struct conf *conf);
void wipe_all(struct conf *conf);
+void clean_old(struct conf *conf, time_t max_old);
// ----------------------------------------------------------------------------
// execute.c
diff --git a/src/cleanup.c b/src/cleanup.c
index 0b66caf..6f650b3 100644
--- a/src/cleanup.c
+++ b/src/cleanup.c
@@ -31,6 +31,7 @@ static uint64_t cache_size;
static size_t files_in_cache;
static uint64_t cache_size_threshold;
static size_t files_in_cache_threshold;
+static time_t oldest_mtime_threshold;
// File comparison function that orders files in mtime order, oldest first.
static int
@@ -124,7 +125,9 @@ sort_and_clean(void)
if ((cache_size_threshold == 0
|| cache_size <= cache_size_threshold)
&& (files_in_cache_threshold == 0
- || files_in_cache <= files_in_cache_threshold)) {
+ || files_in_cache <= files_in_cache_threshold)
+ && (oldest_mtime_threshold == 0
+ || oldest_mtime_threshold <= files[i]->mtime)) {
break;
}
@@ -268,3 +271,14 @@ void wipe_all(struct conf *conf)
// Fix the counters.
clean_up_all(conf);
}
+
+//clean all files older than (now-max_old) secs
+void clean_old(struct conf *conf, time_t max_old)
+{
+ oldest_mtime_threshold = time(NULL) - max_old;
+ for (int i = 0; i <= 0xF; i++) {
+ char *dname = format("%s/%1x", conf->cache_dir, i);
+ clean_up_dir(conf, dname, 0.0);
+ free(dname);
+ }
+}
diff --git a/test/suites/cleanup.bash b/test/suites/cleanup.bash
index a907ac4..cac4f9c 100644
--- a/test/suites/cleanup.bash
+++ b/test/suites/cleanup.bash
@@ -228,4 +228,15 @@ SUITE_cleanup() {
$CCACHE -c >/dev/null
expect_file_count 1 '.nfs*' $CCACHE_DIR
expect_stat 'files in cache' 30
+
+ # -------------------------------------------------------------------------
+ TEST "cleanup of files older than n seconds"
+
+ prepare_cleanup_test_dir $CCACHE_DIR/a
+
+ touch $CCACHE_DIR/a/now.result
+ $CCACHE -F 0 -M 0 >/dev/null
+ $CCACHE -e 10 >/dev/null
+ expect_file_count 1 '*.result' $CCACHE_DIR
+ expect_stat 'files in cache' 1
}
--
2.16.4

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8d450208099a4d202bd7df87caaec81baee20ce9dd62da91e9ea7b95a9072f68
size 354160

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEWpOacaRnks9XhmpRmW3aB1WUrbgFAl8XNMkACgkQmW3aB1WU
rbiWYRAAtF0B5CcpE5fVJmqxBTMpOgEfCgOGMzzf2kmQiSZnWcymT85tPSocYZEX
N8L3mMsQ2T1DkhS7hacec4zTO5UDReySFK9sBS5A37jYhV2Qc7pDmM5CAmjzTuLg
9Z81rrSS/Fa8n3iLqR5AXnCYu9mp+1SyC6OL4McCSoXKVtLOs9j9V9Nc6sCQeuv3
IvOthmTUyH5gcFHMkfdV9Cy5X4Ty5dnVA0egBx8DKbx24tmP6qT140lf82QUSm4A
4VjRrk+ItDOG9uTZw7dtr3bzRv2YfnxqLp2LIBYS4Ff22haDvAW0w9Q4SF2A9aus
MW/RxMrlz+lWez4EG5+/X7+G1c/iq3jfS2Y41L79yNwYwWiZYmMLGvQUCGQU5nNu
YqI6N9Y5PlRfHjWuBjyWIpsksjgHSlFZmKzQ+wgqb3ZDuQ80hAXJiI+3jSZ8pme3
anfB2VmJjJfA2T6QfBZl5dABZlDCWmzn+EzDHj3In7EFIMQnNvlPhh5h/h7Kf4zF
ygbMkGucMUO5fbeMnngAe3XUeJER5rlxKQ76U3Ac1+etpioI41+Xn2CB9MyjDNUm
7XwtExeq7USet2irr5ni2BjMvj0ZU96ROKn3uuGA/Warpxio2n+Kmz9K/qfwZVdi
OV6sSWu4NdEIkCbIFTrqi5Nt6HmhbyD+OWH38kbVCOehU0SyRrY=
=v/w2
-----END PGP SIGNATURE-----

3
ccache-4.1.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5fdc804056632d722a1182e15386696f0ea6c59cb4ab4d65a54f0b269ae86f99
size 389240

16
ccache-4.1.tar.xz.asc Normal file
View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEWpOacaRnks9XhmpRmW3aB1WUrbgFAl+6w2gACgkQmW3aB1WU
rbjzTQ//YaDGvBjzpjgNAZlib9EMB2WY99jk6i3YRlDLTw/rvOKYxZuK4BUI8Uh0
8JkrurXy8SziXXpTsBJTrHGiq+XF4YGA3OGOFEuiJY+TfZO+uVGnWkE1kmd6MO/n
hdVXLsZDFTrv2w0NwjCNFOpO7xwcXvS/e8SoH6AQR49u3jclKRhK/Tmm9E0UPcws
G9HNX5Um3eyq5N8YdZ+aduzYSn12WkYws7Lg3jrgyXaCAcqyHZUUJuuR4pknqYKU
y8NTjGnMGUFoAdjVbSBYoH27ZNdYw5wqB0Aqjgnpu+yK/3qMUeOyK7otA6LFfaZ/
7daRTHsW1rTYc5fifUMAPDN2jsOxrqLKfmjBs60uIoLB7W/3y1Wd22fFlrJTc7tG
Rwm2Ua+hk9lX9qubrAwV4RDuJpXpcMz8f6Vuzy2srn9kahArMonWxW/43C5IwM5v
iH9aNajZ1pKqsXfqVFLhhhok1e5S5arvtwP1KruYWoHPoG5UCh7zbzGNVZZiyDJL
jkGEPTReqRQift+8NmO3Mtpc4IwEwFwXcl2kvay6xf96JleB+z+HZtFvSt0wiLax
oIDYLWB6SZSLYGI3SwuJ+MWlkKi0R+L1ZH/K4HJn3Fb/STqGbMEVy7Dc3xKMLnUN
oc2YSglc07gVgrHjDx7wcf2QBb0NbYivgV+t1CK5cQn0i6+JvHc=
=rAI7
-----END PGP SIGNATURE-----

View File

@ -1,3 +1,29 @@
Mon Nov 23 11:00:00 UTC 2020 - Paul Fee <paul.fee@jci.com>
- Update to version 4.1:
* Symlinks are now followed when guessing the compiler, e.g. /usr/bin/c++ -> g++10
* Added a new compiler_type (CCACHE_COMPILERTYPE) configuration option that allows for overriding the guessed compiler type.
* Added support for caching compilations with -fsyntax-only.
* Added a command line option --config-path, which specifies the configuration file to operate on. It can be used instead of setting CCACHE_CONFIGPATH temporarily.
-------------------------------------------------------------------
Wed Nov 4 07:54:08 UTC 2020 - Martin Pluskal <mpluskal@suse.com>
- Update to version 4.0:
* Changed the default cache directory location to follow the XDG base directory specification.
* Changed compression algorithm from Deflate (zlib) to Zstandard, enabled by default.
* Added functionality for recompressing cache content with a higher compression level.
* Changed hash algorithm from MD4 to BLAKE3.
* Added checksumming with XXH3 to detect data corruption.
* Improved cache directory structure.
* Added support for using file cloning (AKA “reflinks”).
* Added an experimental “inode cache” for file hashes.
- Changes for version 3.7.12:
* Coverage files (.gcno) produced by GCC 9+ when using -fprofile-dir=dir are now handled gracefully by falling back to running the compiler.
* Fixed writing to log file larger than 2 GiB when running ccache compiled in 32-bit mode.
- Drop no longer applying patch:
* 0001-Add-another-cleanup-mechanism-evict-older-than.patch
-------------------------------------------------------------------
Sun Jul 26 21:10:54 UTC 2020 - Matthias Eliasson <elimat@opensuse.org>

View File

@ -17,7 +17,7 @@
Name: ccache
Version: 3.7.11
Version: 4.1
Release: 0
Summary: A Fast C/C++ Compiler Cache
License: GPL-3.0-or-later
@ -25,9 +25,10 @@ URL: https://ccache.dev/
Source0: https://github.com/ccache/ccache/releases/download/v%{version}/ccache-%{version}.tar.xz#/%{name}-%{version}.tar.xz
Source1: https://github.com/ccache/ccache/releases/download/v%{version}/ccache-%{version}.tar.xz.asc#/%{name}-%{version}.tar.xz.asc
Source2: %{name}.keyring
# PATCH-FEATURE-UPSTREAM 0001-Add-another-cleanup-mechanism-evict-older-than.patch https://github.com/ccache/ccache/pull/605
Patch0: 0001-Add-another-cleanup-mechanism-evict-older-than.patch
BuildRequires: zlib-devel
BuildRequires: asciidoc
BuildRequires: cmake
BuildRequires: gcc-c++
BuildRequires: libzstd-devel >= 1.1.2
Provides: distcc:%{_bindir}/ccache
%description
@ -38,15 +39,14 @@ Objective-C++.
%prep
%setup -q
%patch0 -p1
%build
%configure \
--without-bundled-zlib
%make_build
%cmake
%cmake_build
%make_build doc
%install
%make_install
%cmake_install
# create the compat symlinks into /usr/libdir/ccache
mkdir -p %{buildroot}/%{_libdir}/%{name}
@ -64,11 +64,11 @@ ln -sf ../../bin/%{name} c++
# and for nvidia cuda
ln -sf ../../bin/%{name} nvcc
%ifnarch %{ix86}
# Testsuite fails on i586
%check
%make_build check
%endif
# Following failure needs to be adressed:
# The following tests FAILED:
# 29 - test.upgrade (Failed)
#%%check
#ctest
%files
%license LICENSE.* GPL-3.0.txt