Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 4e7bcac

Browse files
Functionality to capture git repository size in usage metrics
1 parent 6a41d52 commit 4e7bcac

File tree

12 files changed

+147
-0
lines changed

12 files changed

+147
-0
lines changed

src/GitHub.Api/Application/ApplicationManagerBase.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ public void SetupGit(GitInstaller.GitInstallationState state)
178178
if (Environment.RepositoryPath.IsInitialized)
179179
{
180180
ConfigureMergeSettings();
181+
CaptureRepoSize();
181182

182183
GitClient.LfsInstall()
183184
.Catch(e =>
@@ -286,6 +287,18 @@ private void ConfigureMergeSettings()
286287
}).RunWithReturn(true);
287288
}
288289

290+
private void CaptureRepoSize()
291+
{
292+
GitClient.CountObjects()
293+
.Then((success, gitObjects) => {
294+
if (success)
295+
{
296+
UsageTracker.UpdateRepoSize(gitObjects.kilobytes);
297+
}
298+
})
299+
.Start();
300+
}
301+
289302
public void RestartRepository()
290303
{
291304
if (!Environment.RepositoryPath.IsInitialized)

src/GitHub.Api/Git/GitClient.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public interface IGitClient
3838
ITask<List<GitLogEntry>> Log(BaseOutputListProcessor<GitLogEntry> processor = null);
3939
ITask<TheVersion> Version(IOutputProcessor<TheVersion> processor = null);
4040
ITask<TheVersion> LfsVersion(IOutputProcessor<TheVersion> processor = null);
41+
ITask<GitCountObjects> CountObjects(IOutputProcessor<GitCountObjects> processor = null);
4142
ITask<GitUser> SetConfigNameAndEmail(string username, string email);
4243
}
4344

@@ -98,6 +99,12 @@ public ITask<TheVersion> LfsVersion(IOutputProcessor<TheVersion> processor = nul
9899
.Configure(processManager);
99100
}
100101

102+
public ITask<GitCountObjects> CountObjects(IOutputProcessor<GitCountObjects> processor = null)
103+
{
104+
return new GitCountObjectsTask(cancellationToken, processor)
105+
.Configure(processManager);
106+
}
107+
101108
public ITask<string> GetConfig(string key, GitConfigSource configSource, IOutputProcessor<string> processor = null)
102109
{
103110
return new GitConfigGetTask(key, configSource, cancellationToken, processor)

src/GitHub.Api/Git/GitCountObjects.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
3+
namespace GitHub.Unity
4+
{
5+
[Serializable]
6+
public struct GitCountObjects
7+
{
8+
public static GitCountObjects Default = new GitCountObjects();
9+
10+
public int objects;
11+
public int kilobytes;
12+
13+
public GitCountObjects(int objects, int kilobytes)
14+
{
15+
this.objects = objects;
16+
this.kilobytes = kilobytes;
17+
}
18+
19+
public int Objects => objects;
20+
21+
public int Kilobytes => kilobytes;
22+
}
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Threading;
2+
3+
namespace GitHub.Unity
4+
{
5+
class GitCountObjectsTask : ProcessTask<GitCountObjects>
6+
{
7+
private const string TaskName = "git count-objects";
8+
9+
public GitCountObjectsTask(CancellationToken token, IOutputProcessor<GitCountObjects> processor = null)
10+
: base(token, processor ?? new GitCountObjectsProcessor())
11+
{
12+
Name = TaskName;
13+
}
14+
15+
public override string ProcessArguments
16+
{
17+
get { return "count-objects"; }
18+
}
19+
public override TaskAffinity Affinity { get { return TaskAffinity.Exclusive; } }
20+
public override string Message { get; set; } = "Counting git objects...";
21+
}
22+
}

src/GitHub.Api/GitHub.Api.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,11 @@
9595
<Compile Include="Cache\CachingClasses.cs" />
9696
<Compile Include="Extensions\ActionExtensions.cs" />
9797
<Compile Include="Extensions\ListExtensions.cs" />
98+
<Compile Include="Git\GitCountObjects.cs" />
9899
<Compile Include="Git\Tasks\GitCheckoutTask.cs" />
99100
<Compile Include="Git\GitAheadBehindStatus.cs" />
100101
<Compile Include="Git\Tasks\GitAheadBehindStatusTask.cs" />
102+
<Compile Include="Git\Tasks\GitCountObjectsTask.cs" />
101103
<Compile Include="Git\Tasks\GitLfsVersionTask.cs" />
102104
<Compile Include="Git\Tasks\GitVersionTask.cs" />
103105
<Compile Include="Git\TreeData.cs" />
@@ -116,6 +118,7 @@
116118
<Compile Include="IO\FileSystem.cs" />
117119
<Compile Include="Managers\Downloader.cs" />
118120
<Compile Include="OutputProcessors\GitAheadBehindStatusOutputProcessor.cs" />
121+
<Compile Include="OutputProcessors\GitCountObjectsProcessor.cs" />
119122
<Compile Include="OutputProcessors\LfsVersionOutputProcessor.cs" />
120123
<Compile Include="OutputProcessors\VersionOutputProcessor.cs" />
121124
<Compile Include="Helpers\TaskHelpers.cs" />

src/GitHub.Api/Metrics/IUsageTracker.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ public interface IUsageTracker
1919
void IncrementUnityProjectViewContextLfsUnlock();
2020
void IncrementPublishViewButtonPublish();
2121
void IncrementApplicationMenuMenuItemCommandLine();
22+
void UpdateRepoSize(int kilobytes);
2223
}
2324
}

src/GitHub.Api/Metrics/UsageModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class Measures
4242
public int UnityProjectViewContextLfsUnlock { get; set; }
4343
public int PublishViewButtonPublish { get; set; }
4444
public int ApplicationMenuMenuItemCommandLine { get; set; }
45+
public int GitRepoSize { get; set; }
4546
}
4647

4748
class UsageModel

src/GitHub.Api/Metrics/UsageTracker.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,13 @@ public void IncrementApplicationMenuMenuItemCommandLine()
236236
usageLoader.Save(usage);
237237
}
238238

239+
public void UpdateRepoSize(int kilobytes)
240+
{
241+
var usage = usageLoader.Load(userId);
242+
usage.GetCurrentMeasures(appVersion, unityVersion, instanceId).GitRepoSize = kilobytes;
243+
usageLoader.Save(usage);
244+
}
245+
239246
public bool Enabled
240247
{
241248
get
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace GitHub.Unity
2+
{
3+
public class GitCountObjectsProcessor : BaseOutputProcessor<GitCountObjects>
4+
{
5+
public override void LineReceived(string line)
6+
{
7+
if (line == null)
8+
{
9+
return;
10+
}
11+
12+
//2488 objects, 4237 kilobytes
13+
14+
var proc = new LineParser(line);
15+
16+
var objects = int.Parse(proc.ReadUntilWhitespace());
17+
proc.ReadUntil(',');
18+
proc.SkipWhitespace();
19+
var kilobytes = int.Parse(proc.ReadUntilWhitespace());
20+
21+
RaiseOnEntry(new GitCountObjects(objects, kilobytes));
22+
}
23+
}
24+
}

src/tests/TestUtils/Helpers/AssertExtensions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,5 +114,11 @@ public static void AssertNotEqual(this GitStatus gitStatus, GitStatus other)
114114
Action action = () => gitStatus.AssertEqual(other);
115115
action.ShouldThrow<AssertionException>();
116116
}
117+
118+
public static void AssertEqual(this GitCountObjects gitStatus, GitCountObjects other)
119+
{
120+
gitStatus.Objects.Should().Be(other.Objects, "Objects should be equal");
121+
gitStatus.Kilobytes.Should().Be(other.Kilobytes, "KilobytesS should be equal");
122+
}
117123
}
118124
}

0 commit comments

Comments
 (0)