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
|
// 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"))
|
long size = 0;
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
foreach (DirectoryInfo directory in parent.GetDirectories ()) {
|
foreach (DirectoryInfo directory in parent.GetDirectories ()) {
|
||||||
// Do not include LocalPath/.git file if it is a subdirectory
|
if (directory.IsSymlink () ||
|
||||||
// This will not affect calling CalculateSizes on /.git directly
|
directory.Name.Equals (".git") ||
|
||||||
if (directory.FullName != Path.Combine (LocalPath, ".git"))
|
directory.Name.Equals ("rebase-apply")) {
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
size += CalculateSizes (directory);
|
size += CalculateSizes (directory);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
SparkleLogger.LogInfo ("Local", "Error calculating size", e);
|
SparkleLogger.LogInfo ("Local", "Error calculating directory size", e);
|
||||||
return 0;
|
}
|
||||||
|
|
||||||
|
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;
|
return size;
|
||||||
|
|
|
@ -70,5 +70,11 @@ namespace SparkleLib {
|
||||||
else
|
else
|
||||||
return byte_count.ToString () + " ʙ";
|
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
|
// 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))
|
if (ExcludePaths.Contains (parent.Name))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
long size = 0;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
foreach (FileInfo file in parent.GetFiles ()) {
|
|
||||||
if (!file.Exists)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
size += file.Length;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (DirectoryInfo directory in parent.GetDirectories ())
|
foreach (DirectoryInfo directory in parent.GetDirectories ())
|
||||||
size += CalculateSize (directory);
|
size += CalculateSize (directory);
|
||||||
|
|
||||||
} catch (Exception) {
|
foreach (FileInfo file in parent.GetFiles ())
|
||||||
return 0;
|
size += file.Length;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
SparkleLogger.LogInfo ("Local", "Error calculating directory size", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
|
|
Loading…
Reference in a new issue