cvmfs/sync_mediator.cc
void SyncMediator::CompleteHardlinks(const SyncItem &entry) {
  assert(handle_hardlinks_);

  // If no hardlink in this directory was changed, we can skip this
  if (GetHardlinkMap().empty())
    return;

  LogCvmfs(kLogPublish, kLogVerboseMsg, "Post-processing hard links in %s",
           entry.GetUnionPath().c_str());

  // Look for legacy hardlinks
  FileSystemTraversal<SyncMediator> traversal(this, union_engine_->union_path(),
                                              false);
  traversal.fn_new_file =
    &SyncMediator::LegacyRegularHardlinkCallback;
  traversal.fn_new_symlink = &SyncMediator::LegacySymlinkHardlinkCallback;
  traversal.Recurse(entry.GetUnionPath());
}
/**
 * Create a recursion engine which DOES NOT recurse into directories.
 * It basically goes through the current directory (in the union volume) and
 * searches for legacy hardlinks which has to be connected to the new
 * or edited ones.
 */
Create a recursion engine which DOES NOT recurse into directories.
It basically goes through the current directory (in the union volume) and
searches for legacy hardlinks which has to be connected to the new
or edited ones.
Create a recursion engine which DOES NOT recurse into directories . It basically goes through the current directory ( in the union volume ) and searches for legacy hardlinks which has to be connected to the new or edited ones .
void SyncMediator::CompleteHardlinks(const SyncItem &entry) {
  assert(handle_hardlinks_);
  if (GetHardlinkMap().empty())
    return;
  LogCvmfs(kLogPublish, kLogVerboseMsg, "Post-processing hard links in %s",
           entry.GetUnionPath().c_str());
  FileSystemTraversal<SyncMediator> traversal(this, union_engine_->union_path(),
                                              false);
  traversal.fn_new_file =
    &SyncMediator::LegacyRegularHardlinkCallback;
  traversal.fn_new_symlink = &SyncMediator::LegacySymlinkHardlinkCallback;
  traversal.Recurse(entry.GetUnionPath());
}
void SyncMediator :: CompleteHardlinks ( const SyncItem & entry ) { assert ( handle_hardlinks_ ) ; if ( GetHardlinkMap ( ) . empty ( ) ) return ; LogCvmfs ( kLogPublish , kLogVerboseMsg , " " , entry . GetUnionPath ( ) . c_str ( ) ) ; FileSystemTraversal < SyncMediator > traversal ( this , union_engine_ -> union_path ( ) , false ) ; traversal . fn_new_file = & SyncMediator :: LegacyRegularHardlinkCallback ; traversal . fn_new_symlink = & SyncMediator :: LegacySymlinkHardlinkCallback ; traversal . Recurse ( entry . GetUnionPath ( ) ) ; }
Create a recursion engine which DOES NOT recurse into directories.
Create a recursion engine which DOES NOT recurse into directories .
// If no hardlink in this directory was changed, we can skip this // Look for legacy hardlinks