GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/sync_union_aufs.cc
Date: 2026-10-04 02:40:33
Exec Total Coverage
Lines: 0 36 0.0%
Branches: 0 64 0.0%

Line Branch Exec Source
1 /**
2 * This file is part of the CernVM File System
3 */
4
5 #include "sync_union_aufs.h"
6
7 #include <string>
8
9 #include "sync_mediator.h"
10 #include "sync_union.h"
11 #include "util/fs_traversal.h"
12
13 namespace publish {
14
15 ✗ SyncUnionAufs::SyncUnionAufs(SyncMediator *mediator,
16 const std::string &rdonly_path,
17 const std::string &union_path,
18 ✗ const std::string &scratch_path)
19 ✗ : SyncUnion(mediator, rdonly_path, union_path, scratch_path) {
20 // Ignored filenames
21 ✗ ignore_filenames_.insert(".wh..wh..tmp");
22 ✗ ignore_filenames_.insert(".wh..wh.plnk");
23 ✗ ignore_filenames_.insert(".wh..wh.aufs");
24 ✗ ignore_filenames_.insert(".wh..wh.orph");
25 ✗ ignore_filenames_.insert(".wh..wh..opq");
26
27 // set the whiteout prefix AUFS precedes for every whiteout file
28 ✗ whiteout_prefix_ = ".wh.";
29 }
30
31 ✗ void SyncUnionAufs::Traverse() {
32 ✗ assert(this->IsInitialized());
33
34 ✗ FileSystemTraversal<SyncUnionAufs> traversal(this, scratch_path(), true);
35
36 ✗ traversal.fn_enter_dir = &SyncUnionAufs::EnterDirectory;
37 ✗ traversal.fn_leave_dir = &SyncUnionAufs::LeaveDirectory;
38 ✗ traversal.fn_new_file = &SyncUnionAufs::ProcessRegularFile;
39 ✗ traversal.fn_ignore_file = &SyncUnionAufs::IgnoreFilePredicate;
40 ✗ traversal.fn_new_dir_prefix = &SyncUnionAufs::ProcessDirectory;
41 ✗ traversal.fn_new_symlink = &SyncUnionAufs::ProcessSymlink;
42 ✗ traversal.fn_new_character_dev = &SyncUnionAufs::ProcessCharacterDevice;
43 ✗ traversal.fn_new_block_dev = &SyncUnionAufs::ProcessBlockDevice;
44 ✗ traversal.fn_new_fifo = &SyncUnionAufs::ProcessFifo;
45 ✗ traversal.fn_new_socket = &SyncUnionAufs::ProcessSocket;
46 ✗ LogCvmfs(kLogUnionFs, kLogVerboseMsg,
47 "Aufs starting traversal "
48 "recursion for scratch_path=[%s] with external data set to %d",
49 ✗ scratch_path().c_str(), mediator_->IsExternalData());
50
51 ✗ traversal.Recurse(scratch_path());
52 }
53
54 ✗ bool SyncUnionAufs::IsWhiteoutEntry(SharedPtr<SyncItem> entry) const {
55 ✗ return entry->filename().substr(0, whiteout_prefix_.length())
56 ✗ == whiteout_prefix_;
57 }
58
59 ✗ bool SyncUnionAufs::IsOpaqueDirectory(SharedPtr<SyncItem> directory) const {
60 ✗ return FileExists(directory->GetScratchPath() + "/.wh..wh..opq");
61 }
62
63 ✗ string SyncUnionAufs::UnwindWhiteoutFilename(SharedPtr<SyncItem> entry) const {
64 ✗ const std::string &filename = entry->filename();
65 ✗ return filename.substr(whiteout_prefix_.length());
66 }
67
68 ✗ bool SyncUnionAufs::IgnoreFilePredicate(const string &parent_dir,
69 const string &filename) {
70 ✗ return SyncUnion::IgnoreFilePredicate(parent_dir, filename)
71 ✗ || (ignore_filenames_.find(filename) != ignore_filenames_.end());
72 }
73 } // namespace publish
74