aboutsummaryrefslogtreecommitdiffstats
path: root/src/db/update/Walk.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/db/update/Walk.cxx')
-rw-r--r--src/db/update/Walk.cxx51
1 files changed, 29 insertions, 22 deletions
diff --git a/src/db/update/Walk.cxx b/src/db/update/Walk.cxx
index 9fdb5bbdf..3e5654a3c 100644
--- a/src/db/update/Walk.cxx
+++ b/src/db/update/Walk.cxx
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003-2014 The Music Player Daemon Project
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
@@ -57,17 +57,17 @@ UpdateWalk::UpdateWalk(EventLoop &_loop, DatabaseListener &_listener,
{
#ifndef WIN32
follow_inside_symlinks =
- config_get_bool(CONF_FOLLOW_INSIDE_SYMLINKS,
+ config_get_bool(ConfigOption::FOLLOW_INSIDE_SYMLINKS,
DEFAULT_FOLLOW_INSIDE_SYMLINKS);
follow_outside_symlinks =
- config_get_bool(CONF_FOLLOW_OUTSIDE_SYMLINKS,
+ config_get_bool(ConfigOption::FOLLOW_OUTSIDE_SYMLINKS,
DEFAULT_FOLLOW_OUTSIDE_SYMLINKS);
#endif
}
static void
-directory_set_stat(Directory &dir, const FileInfo &info)
+directory_set_stat(Directory &dir, const StorageFileInfo &info)
{
dir.inode = info.inode;
dir.device = info.device;
@@ -140,7 +140,7 @@ UpdateWalk::PurgeDeletedFromDirectory(Directory &directory)
static bool
update_directory_stat(Storage &storage, Directory &directory)
{
- FileInfo info;
+ StorageFileInfo info;
if (!GetInfo(storage, directory.GetPath(), info))
return false;
@@ -190,7 +190,7 @@ FindAncestorLoop(Storage &storage, Directory *parent,
inline bool
UpdateWalk::UpdatePlaylistFile(Directory &directory,
const char *name, const char *suffix,
- const FileInfo &info)
+ const StorageFileInfo &info)
{
if (!playlist_suffix_supported(suffix))
return false;
@@ -206,7 +206,7 @@ UpdateWalk::UpdatePlaylistFile(Directory &directory,
inline bool
UpdateWalk::UpdateRegularFile(Directory &directory,
- const char *name, const FileInfo &info)
+ const char *name, const StorageFileInfo &info)
{
const char *suffix = uri_get_suffix(name);
if (suffix == nullptr)
@@ -219,7 +219,8 @@ UpdateWalk::UpdateRegularFile(Directory &directory,
void
UpdateWalk::UpdateDirectoryChild(Directory &directory,
- const char *name, const FileInfo &info)
+ const ExcludeList &exclude_list,
+ const char *name, const StorageFileInfo &info)
{
assert(strchr(name, '/') == nullptr);
@@ -236,7 +237,7 @@ UpdateWalk::UpdateDirectoryChild(Directory &directory,
assert(&directory == subdir->parent);
- if (!UpdateDirectory(*subdir, info))
+ if (!UpdateDirectory(*subdir, exclude_list, info))
editor.LockDeleteDirectory(subdir);
} else {
FormatDebug(update_domain,
@@ -327,7 +328,9 @@ UpdateWalk::SkipSymlink(const Directory *directory,
}
bool
-UpdateWalk::UpdateDirectory(Directory &directory, const FileInfo &info)
+UpdateWalk::UpdateDirectory(Directory &directory,
+ const ExcludeList &exclude_list,
+ const StorageFileInfo &info)
{
assert(info.IsDirectory());
@@ -340,17 +343,17 @@ UpdateWalk::UpdateDirectory(Directory &directory, const FileInfo &info)
return false;
}
- ExcludeList exclude_list;
+ ExcludeList child_exclude_list(exclude_list);
{
const auto exclude_path_fs =
storage.MapChildFS(directory.GetPath(), ".mpdignore");
if (!exclude_path_fs.IsNull())
- exclude_list.LoadFile(exclude_path_fs);
+ child_exclude_list.LoadFile(exclude_path_fs);
}
- if (!exclude_list.IsEmpty())
- RemoveExcludedFromDirectory(directory, exclude_list);
+ if (!child_exclude_list.IsEmpty())
+ RemoveExcludedFromDirectory(directory, child_exclude_list);
PurgeDeletedFromDirectory(directory);
@@ -361,7 +364,7 @@ UpdateWalk::UpdateDirectory(Directory &directory, const FileInfo &info)
{
const auto name_fs = AllocatedPath::FromUTF8(name_utf8);
- if (name_fs.IsNull() || exclude_list.Check(name_fs))
+ if (name_fs.IsNull() || child_exclude_list.Check(name_fs))
continue;
}
@@ -370,13 +373,13 @@ UpdateWalk::UpdateDirectory(Directory &directory, const FileInfo &info)
continue;
}
- FileInfo info2;
+ StorageFileInfo info2;
if (!GetInfo(*reader, info2)) {
modified |= editor.DeleteNameIn(directory, name_utf8);
continue;
}
- UpdateDirectoryChild(directory, name_utf8, info2);
+ UpdateDirectoryChild(directory, child_exclude_list, name_utf8, info2);
}
directory.mtime = info.mtime;
@@ -400,7 +403,7 @@ UpdateWalk::DirectoryMakeChildChecked(Directory &parent,
return directory;
}
- FileInfo info;
+ StorageFileInfo info;
if (!GetInfo(storage, uri_utf8, info) ||
FindAncestorLoop(storage, &parent, info.inode, info.device))
return nullptr;
@@ -462,13 +465,15 @@ UpdateWalk::UpdateUri(Directory &root, const char *uri)
return;
}
- FileInfo info;
+ StorageFileInfo info;
if (!GetInfo(storage, uri, info)) {
modified |= editor.DeleteNameIn(*parent, name);
return;
}
- UpdateDirectoryChild(*parent, name, info);
+ ExcludeList exclude_list;
+
+ UpdateDirectoryChild(*parent, exclude_list, name, info);
}
bool
@@ -480,11 +485,13 @@ UpdateWalk::Walk(Directory &root, const char *path, bool discard)
if (path != nullptr && !isRootDirectory(path)) {
UpdateUri(root, path);
} else {
- FileInfo info;
+ StorageFileInfo info;
if (!GetInfo(storage, "", info))
return false;
- UpdateDirectory(root, info);
+ ExcludeList exclude_list;
+
+ UpdateDirectory(root, exclude_list, info);
}
return modified;