Enhance statistics for repo by sizes and ref-counts
The statistics for a repo now expose how many bytes are used in the filesystem to store all loose/packed objects. The number of packed/loose refs are also exposed. Change-Id: I335a4c7630a2629a86f13a2a5cd99f79a2c2afa4
This commit is contained in:
parent
abd60101b6
commit
6b9b024c91
|
@ -74,6 +74,8 @@
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import org.eclipse.jgit.lib.ProgressMonitor;
|
import org.eclipse.jgit.lib.ProgressMonitor;
|
||||||
import org.eclipse.jgit.lib.Ref;
|
import org.eclipse.jgit.lib.Ref;
|
||||||
|
import org.eclipse.jgit.lib.Ref.Storage;
|
||||||
|
import org.eclipse.jgit.lib.RefDatabase;
|
||||||
import org.eclipse.jgit.revwalk.ObjectWalk;
|
import org.eclipse.jgit.revwalk.ObjectWalk;
|
||||||
import org.eclipse.jgit.revwalk.RevObject;
|
import org.eclipse.jgit.revwalk.RevObject;
|
||||||
import org.eclipse.jgit.revwalk.RevWalk;
|
import org.eclipse.jgit.revwalk.RevWalk;
|
||||||
|
@ -716,6 +718,26 @@ public class RepoStatistics {
|
||||||
* The number of objects stored as loose objects.
|
* The number of objects stored as loose objects.
|
||||||
*/
|
*/
|
||||||
public long numberOfLooseObjects;
|
public long numberOfLooseObjects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The sum of the sizes of all files used to persist loose objects.
|
||||||
|
*/
|
||||||
|
public long sizeOfLooseObjects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The sum of the sizes of all pack files.
|
||||||
|
*/
|
||||||
|
public long sizeOfPackedObjects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of loose refs.
|
||||||
|
*/
|
||||||
|
public long numberOfLooseRefs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of refs stored in pack files.
|
||||||
|
*/
|
||||||
|
public long numberOfPackedRefs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -728,25 +750,38 @@ public class RepoStatistics {
|
||||||
public RepoStatistics getStatistics() throws IOException {
|
public RepoStatistics getStatistics() throws IOException {
|
||||||
RepoStatistics ret = new RepoStatistics();
|
RepoStatistics ret = new RepoStatistics();
|
||||||
Collection<PackFile> packs = repo.getObjectDatabase().getPacks();
|
Collection<PackFile> packs = repo.getObjectDatabase().getPacks();
|
||||||
for (PackFile f : packs)
|
for (PackFile f : packs) {
|
||||||
ret.numberOfPackedObjects += f.getIndex().getObjectCount();
|
ret.numberOfPackedObjects += f.getIndex().getObjectCount();
|
||||||
ret.numberOfPackFiles = packs.size();
|
ret.numberOfPackFiles++;
|
||||||
|
ret.sizeOfPackedObjects += f.getPackFile().length();
|
||||||
|
}
|
||||||
File objDir = repo.getObjectsDirectory();
|
File objDir = repo.getObjectsDirectory();
|
||||||
String[] fanout = objDir.list();
|
String[] fanout = objDir.list();
|
||||||
if (fanout != null && fanout.length > 0) {
|
if (fanout != null && fanout.length > 0) {
|
||||||
for (String d : fanout) {
|
for (String d : fanout) {
|
||||||
if (d.length() != 2)
|
if (d.length() != 2)
|
||||||
continue;
|
continue;
|
||||||
String[] entries = new File(objDir, d).list();
|
File[] entries = new File(objDir, d).listFiles();
|
||||||
if (entries == null)
|
if (entries == null)
|
||||||
continue;
|
continue;
|
||||||
for (String e : entries) {
|
for (File f : entries) {
|
||||||
if (e.length() != Constants.OBJECT_ID_STRING_LENGTH - 2)
|
if (f.getName().length() != Constants.OBJECT_ID_STRING_LENGTH - 2)
|
||||||
continue;
|
continue;
|
||||||
ret.numberOfLooseObjects++;
|
ret.numberOfLooseObjects++;
|
||||||
|
ret.sizeOfLooseObjects += f.length();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RefDatabase refDb = repo.getRefDatabase();
|
||||||
|
for (Ref r : refDb.getRefs(RefDatabase.ALL).values()) {
|
||||||
|
Storage storage = r.getStorage();
|
||||||
|
if (storage == Storage.LOOSE || storage == Storage.LOOSE_PACKED)
|
||||||
|
ret.numberOfLooseRefs++;
|
||||||
|
if (storage == Storage.PACKED || storage == Storage.LOOSE_PACKED)
|
||||||
|
ret.numberOfPackedRefs++;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue