repo: refactor size calculation, ignore symlinks. fixes #1149
This commit is contained in:
parent
d093894b2c
commit
aa9e56b60a
|
@ -1061,41 +1061,39 @@ namespace SparkleLib.Git {
|
|||
|
||||
|
||||
// Recursively gets a folder's size in bytes
|
||||
private double CalculateSizes (DirectoryInfo parent)
|
||||
private long CalculateSizes (DirectoryInfo parent)
|
||||
{
|
||||
if (!Directory.Exists (parent.FullName) || parent.Name.Equals ("rebase-apply"))
|
||||
return 0;
|
||||
|
||||
double size = 0;
|
||||
|
||||
try {
|
||||
foreach (FileInfo file in parent.GetFiles ()) {
|
||||
if (!file.Exists)
|
||||
return 0;
|
||||
|
||||
if (file.Name.Equals (".empty"))
|
||||
File.SetAttributes (file.FullName, FileAttributes.Hidden);
|
||||
|
||||
size += file.Length;
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
SparkleLogger.LogInfo ("Local", "Error calculating size", e);
|
||||
return 0;
|
||||
}
|
||||
|
||||
long size = 0;
|
||||
|
||||
try {
|
||||
foreach (DirectoryInfo directory in parent.GetDirectories ()) {
|
||||
// Do not include LocalPath/.git file if it is a subdirectory
|
||||
// This will not affect calling CalculateSizes on /.git directly
|
||||
if (directory.FullName != Path.Combine (LocalPath, ".git"))
|
||||
size += CalculateSizes (directory);
|
||||
if (directory.IsSymlink () ||
|
||||
directory.Name.Equals (".git") ||
|
||||
directory.Name.Equals ("rebase-apply")) {
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
size += CalculateSizes (directory);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
SparkleLogger.LogInfo ("Local", "Error calculating size", e);
|
||||
return 0;
|
||||
SparkleLogger.LogInfo ("Local", "Error calculating directory size", e);
|
||||
}
|
||||
|
||||
try {
|
||||
foreach (FileInfo file in parent.GetFiles ()) {
|
||||
if (file.IsSymlink ())
|
||||
continue;
|
||||
|
||||
if (file.Name.Equals (".empty"))
|
||||
File.SetAttributes (file.FullName, FileAttributes.Hidden);
|
||||
else
|
||||
size += file.Length;
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
SparkleLogger.LogInfo ("Local", "Error calculating file size", e);
|
||||
}
|
||||
|
||||
return size;
|
||||
|
|
|
@ -70,5 +70,11 @@ namespace SparkleLib {
|
|||
else
|
||||
return byte_count.ToString () + " ʙ";
|
||||
}
|
||||
|
||||
|
||||
public static bool IsSymlink (this FileSystemInfo file)
|
||||
{
|
||||
return ((file.Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -501,29 +501,22 @@ namespace SparkleLib {
|
|||
|
||||
|
||||
// Recursively gets a folder's size in bytes
|
||||
private double CalculateSize (DirectoryInfo parent)
|
||||
private long CalculateSize (DirectoryInfo parent)
|
||||
{
|
||||
if (!Directory.Exists (parent.ToString ()))
|
||||
return 0;
|
||||
|
||||
double size = 0;
|
||||
|
||||
if (ExcludePaths.Contains (parent.Name))
|
||||
return 0;
|
||||
|
||||
long size = 0;
|
||||
|
||||
try {
|
||||
foreach (FileInfo file in parent.GetFiles ()) {
|
||||
if (!file.Exists)
|
||||
return 0;
|
||||
|
||||
size += file.Length;
|
||||
}
|
||||
|
||||
foreach (DirectoryInfo directory in parent.GetDirectories ())
|
||||
size += CalculateSize (directory);
|
||||
|
||||
} catch (Exception) {
|
||||
return 0;
|
||||
foreach (FileInfo file in parent.GetFiles ())
|
||||
size += file.Length;
|
||||
|
||||
} catch (Exception e) {
|
||||
SparkleLogger.LogInfo ("Local", "Error calculating directory size", e);
|
||||
}
|
||||
|
||||
return size;
|
||||
|
|
Loading…
Reference in a new issue