GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/sync_union_aufs.cc
Date: 2026-05-03 02:36:16
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