diff --git a/RombaSharp/RombaSharp.Inits.cs b/RombaSharp/RombaSharp.Inits.cs
index 7f78256d..6a97b46c 100644
--- a/RombaSharp/RombaSharp.Inits.cs
+++ b/RombaSharp/RombaSharp.Inits.cs
@@ -64,13 +64,7 @@ namespace RombaSharp
{
// TODO: All instances of Hash.DeepHashes should be made into 0x0 eventually
df.PopulateFromDir(dir, Hash.DeepHashes, false, false, SkipFileType.None, false, false, _tmpdir, false, null, true);
-
- // If we're looking for only needed, consider the zipfiles themselves too
- if (onlyNeeded)
- {
- // TODO: All instances of Hash.DeepHashes should be made into 0x0 eventually
- df.PopulateFromDir(dir, Hash.DeepHashes, false, true, SkipFileType.None, false, false, _tmpdir, false, null, true);
- }
+ df.PopulateFromDir(dir, Hash.DeepHashes, false, true, SkipFileType.None, false, false, _tmpdir, false, null, true);
}
// Create an empty Dat for files that need to be rebuilt
@@ -266,10 +260,17 @@ namespace RombaSharp
/// Wrap printing dat stats
///
/// List of input DATs to get stats from
- /// TODO: Verify implementation
private static void InitDatStats(List inputs)
{
- Globals.Logger.Error("This feature is not yet implemented: datstats");
+ // If we have no inputs listed, we want to use datroot
+ if (inputs == null || inputs.Count == 0)
+ {
+ inputs = new List();
+ inputs.Add(Path.GetFullPath(_dats));
+ }
+
+ // Now output the stats for all inputs
+ DatFile.OutputStats(inputs, "rombasharp-datstats", null /* outDir */, true /* single */, true /* baddumpCol */, true /* nodumpCol */, StatReportFormat.Textfile);
}
///
diff --git a/SabreTools.Library/Tools/Utilities.cs b/SabreTools.Library/Tools/Utilities.cs
index d8e70ecb..7def3d6b 100644
--- a/SabreTools.Library/Tools/Utilities.cs
+++ b/SabreTools.Library/Tools/Utilities.cs
@@ -1426,6 +1426,29 @@ namespace SabreTools.Library.Tools
return infiles;
}
+ ///
+ /// Retrieve a list of directories from a directory recursively in proper order
+ ///
+ /// Directory to parse
+ /// List representing existing files
+ /// List with all new files
+ public static List RetrieveDirectories(string directory, List infiles)
+ {
+ // Take care of the files in the top directory
+ List toadd = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly).ToList();
+ toadd.Sort(new NaturalComparer());
+ infiles.AddRange(toadd);
+
+ // Then recurse through and add from the directories
+ foreach (string dir in toadd)
+ {
+ infiles = RetrieveDirectories(dir, infiles);
+ }
+
+ // Return the new list
+ return infiles;
+ }
+
#endregion
#region File Manipulation
@@ -1598,6 +1621,41 @@ namespace SabreTools.Library.Tools
return outputs;
}
+ ///
+ /// Retrieve a list of just directories from inputs
+ ///
+ /// List of strings representing directories and files
+ /// True if the parent name should be appended after the special character "¬", false otherwise (default)
+ /// List of strings representing just directories from the inputs
+ public static List GetOnlyDirectoriesFromInputs(List inputs, bool appendparent = false)
+ {
+ List outputs = new List();
+ foreach (string input in inputs)
+ {
+ if (Directory.Exists(input))
+ {
+ List directories = RetrieveDirectories(input, new List());
+ foreach (string dir in directories)
+ {
+ try
+ {
+ outputs.Add(Path.GetFullPath(dir) + (appendparent ? "¬" + Path.GetFullPath(input) : ""));
+ }
+ catch (PathTooLongException)
+ {
+ Globals.Logger.Warning("The path for '{0}' was too long", dir);
+ }
+ catch (Exception ex)
+ {
+ Globals.Logger.Error(ex.ToString());
+ }
+ }
+ }
+ }
+
+ return outputs;
+ }
+
///
/// Get the XmlTextReader associated with a file, if possible
///