repo: refactor size calculation, ignore symlinks. fixes #1149

This commit is contained in:
Hylke Bons 2013-01-11 19:58:14 +01:00
parent afd7b76866
commit 7d7cddc680
3 changed files with 40 additions and 43 deletions

View file

@ -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")) {
size += CalculateSizes (directory);
continue;
}
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;

View file

@ -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);
}
} }
} }

View file

@ -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;