diff --git a/.gitignore b/.gitignore index 7d99983..e03aa74 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,6 @@ /.vs bin -obj \ No newline at end of file +obj +/_checksum.sha +launchSettings.json diff --git a/BuildSum/MainModule.cs b/BuildSum/MainModule.cs index 912eb2c..1464a54 100644 --- a/BuildSum/MainModule.cs +++ b/BuildSum/MainModule.cs @@ -13,6 +13,7 @@ public class MainModule public string TargetDir; public string CompressDir; public List IgnoreFiles = new List(); + public bool IgnoreHidden = true; private void Log(LogStatus status, LogCategory category, string filename, string message) { @@ -90,6 +91,10 @@ public MainModule(string[] args) i++; ignorePath = args[i]; break; + case "--include-hidden": + case "-h": + IgnoreHidden = false; + break; case "--help": case "/?": ShowUsage(); @@ -152,7 +157,7 @@ public void Run() { Error(string.Format("{0}: ディレクトリがありません", TargetDir)); } - FileList list = FileList.CreateByDirectory(TargetDir, IgnoreFiles, CompressDir); + FileList list = FileList.CreateByDirectory(TargetDir, IgnoreFiles, IgnoreHidden, CompressDir); list.Log += FileList_Log; list.SaveChecksum(); CompressFiles(list); diff --git a/BuildSum/Resources/Usage.txt b/BuildSum/Resources/Usage.txt index 439b0c7..cb0cd0b 100644 --- a/BuildSum/Resources/Usage.txt +++ b/BuildSum/Resources/Usage.txt @@ -22,6 +22,10 @@ Options: evf͉sŋ؂BChJ[hB --ignoreƔrIɎgpB + --include-hidden + -h + ꗗɉBt@C܂߂B + --help /? ̃wv\ diff --git a/HDistCore/FileList.cs b/HDistCore/FileList.cs index f66ddcb..4476538 100644 --- a/HDistCore/FileList.cs +++ b/HDistCore/FileList.cs @@ -127,7 +127,8 @@ public FileEntry FindEntry(string targetDirectory, string filename) public void SaveChecksum() { - SaveToFile(Path.Combine(BaseDirectory, CHECKSUM_FILE)); + string path = Path.Combine(BaseDirectory, CHECKSUM_FILE); + SaveToFile(path); } public void SaveToFile(string filename) @@ -139,6 +140,8 @@ public void SaveToFile(string filename) writer.WriteLine(entry.GetChecksum(BaseDirectory) + "\t" + entry.FileName); } } + FileAttributes attr = File.GetAttributes(filename); + File.SetAttributes(filename, attr | FileAttributes.Hidden); } public void SaveToStream(Stream stream) { @@ -337,43 +340,43 @@ internal FileList(string baseDir, string filename) } } - private void EnumFiles(string directory, List ignoreNames) + private bool IsIgnored(string fullPath, string relPath, List ignoreNames, bool ignoreHidden) { - foreach (string s in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)) + if (ignoreHidden && (File.GetAttributes(fullPath) & FileAttributes.Hidden) != 0) { - string path1 = Path.GetRelativePath(BaseDirectory, s); - string path2 = Path.GetFileName(s); - bool ignore = false; - foreach (Regex regex in ignoreNames) + return true; + } + string path1 = Treat(relPath); + string path2 = Path.GetFileName(path1); + foreach (Regex regex in ignoreNames) + { + if (regex.Match(path1).Success || regex.Match(path2).Success) { - if (regex.Match(Treat(path1)).Success || regex.Match(Treat(path2)).Success) - { - ignore = true; - break; - } + return true; } - if (!ignore) + } + return false; + } + + private void EnumFiles(string directory, List ignoreNames, bool ignoreHidden) + { + foreach (string s in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)) + { + string relPath = Path.GetRelativePath(BaseDirectory, s); + if (IsIgnored(s, relPath, ignoreNames, ignoreHidden)) { - _list.Add(new FileEntry(this, path1)); + continue; } + _list.Add(new FileEntry(this, relPath)); } foreach (string s in Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly)) { - string path1 = Path.GetRelativePath(BaseDirectory, s); - string path2 = Path.GetFileName(s); - bool ignore = false; - foreach (Regex regex in ignoreNames) - { - if (regex.Match(Treat(path1)).Success || regex.Match(Treat(path2)).Success) - { - ignore = true; - break; - } - } - if (!ignore) + string relPath = Path.GetRelativePath(BaseDirectory, s); + if (IsIgnored(s, relPath, ignoreNames, ignoreHidden)) { - EnumFiles(s, ignoreNames); + continue; } + EnumFiles(s, ignoreNames, ignoreHidden); } InvalidateNameToEntry(); } @@ -411,7 +414,7 @@ private static Regex ToRegex(string wildcard) return new Regex(buf.ToString()); } - internal FileList(string baseDir, IList ignoreNames) + internal FileList(string baseDir, IList ignoreNames, bool ignoreHidden) { FileName = null; BaseDirectory = baseDir; @@ -421,14 +424,14 @@ internal FileList(string baseDir, IList ignoreNames) ignores.Add(ToRegex(s)); } ignores.Add(ToRegex(CHECKSUM_FILE)); - EnumFiles(baseDir, ignores); + EnumFiles(baseDir, ignores, ignoreHidden); _list.Sort(); Checksum = new byte[0]; } - public static FileList CreateByDirectory(string directory, IList ignoreNames, string compressDirectory) + public static FileList CreateByDirectory(string directory, IList ignoreNames, bool ignodeHidden, string compressDirectory) { - return new FileList(directory, ignoreNames) + return new FileList(directory, ignoreNames, ignodeHidden) { CompressedDirectory = compressDirectory, DestinationDirectory = directory,