Skip to content

Commit

Permalink
Feature: Added support for initializing folders as Git repos (#12803)
Browse files Browse the repository at this point in the history
  • Loading branch information
ferrariofilippo authored Jun 30, 2023
1 parent 7f14d5e commit 25b0155
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 4 deletions.
5 changes: 4 additions & 1 deletion src/Files.App/Actions/Git/GitFetchAction.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using Files.App.Contexts;
// Copyright (c) 2023 Files Community
// Licensed under the MIT License. See the LICENSE.

using Files.App.Contexts;

namespace Files.App.Actions
{
Expand Down
46 changes: 46 additions & 0 deletions src/Files.App/Actions/Git/GitInitAction.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// Copyright (c) 2023 Files Community
// Licensed under the MIT License. See the LICENSE.

using Files.App.Contexts;

namespace Files.App.Actions
{
sealed class GitInitAction : ObservableObject, IAction
{
private readonly IContentPageContext _context;

public string Label
=> "InitRepo".GetLocalizedResource();

public string Description
=> "InitRepoDescription".GetLocalizedResource();

public bool IsExecutable =>
_context.Folder is not null &&
!_context.IsGitRepository;

public GitInitAction()
{
_context = Ioc.Default.GetRequiredService<IContentPageContext>();

_context.PropertyChanged += Context_PropertyChanged;
}

public Task ExecuteAsync()
{
GitHelpers.InitializeRepository(_context.Folder?.ItemPath);
return Task.CompletedTask;
}

private void Context_PropertyChanged(object? sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case nameof(IContentPageContext.Folder):
case nameof(IContentPageContext.IsGitRepository):
OnPropertyChanged(nameof(IsExecutable));
break;
}
}
}
}
5 changes: 4 additions & 1 deletion src/Files.App/Actions/Git/GitPullAction.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using Files.App.Commands;
// Copyright (c) 2023 Files Community
// Licensed under the MIT License. See the LICENSE.

using Files.App.Commands;
using Files.App.Contexts;

namespace Files.App.Actions
Expand Down
5 changes: 4 additions & 1 deletion src/Files.App/Actions/Git/GitPushAction.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using Files.App.Commands;
// Copyright (c) 2023 Files Community
// Licensed under the MIT License. See the LICENSE.

using Files.App.Commands;
using Files.App.Contexts;

namespace Files.App.Actions
Expand Down
5 changes: 4 additions & 1 deletion src/Files.App/Actions/Git/GitSyncAction.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using Files.App.Commands;
// Copyright (c) 2023 Files Community
// Licensed under the MIT License. See the LICENSE.

using Files.App.Commands;
using Files.App.Contexts;

namespace Files.App.Actions
Expand Down
1 change: 1 addition & 0 deletions src/Files.App/Commands/CommandCodes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ public enum CommandCodes

// Git
GitFetch,
GitInit,
GitPull,
GitPush,
GitSync,
Expand Down
2 changes: 2 additions & 0 deletions src/Files.App/Commands/Manager/CommandManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ public IRichCommand this[HotKey hotKey]
public IRichCommand OpenFileLocation => commands[CommandCodes.OpenFileLocation];
public IRichCommand PlayAll => commands[CommandCodes.PlayAll];
public IRichCommand GitFetch => commands[CommandCodes.GitFetch];
public IRichCommand GitInit => commands[CommandCodes.GitInit];
public IRichCommand GitPull => commands[CommandCodes.GitPull];
public IRichCommand GitPush => commands[CommandCodes.GitPush];
public IRichCommand GitSync => commands[CommandCodes.GitSync];
Expand Down Expand Up @@ -313,6 +314,7 @@ public CommandManager()
[CommandCodes.OpenFileLocation] = new OpenFileLocationAction(),
[CommandCodes.PlayAll] = new PlayAllAction(),
[CommandCodes.GitFetch] = new GitFetchAction(),
[CommandCodes.GitInit] = new GitInitAction(),
[CommandCodes.GitPull] = new GitPullAction(),
[CommandCodes.GitPush] = new GitPushAction(),
[CommandCodes.GitSync] = new GitSyncAction(),
Expand Down
1 change: 1 addition & 0 deletions src/Files.App/Commands/Manager/ICommandManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ public interface ICommandManager : IEnumerable<IRichCommand>
IRichCommand PlayAll { get; }

IRichCommand GitFetch { get; }
IRichCommand GitInit { get; }
IRichCommand GitPull { get; }
IRichCommand GitPush { get; }
IRichCommand GitSync { get; }
Expand Down
8 changes: 8 additions & 0 deletions src/Files.App/Helpers/GitHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,14 @@ public static GitItemModel GetGitInformationForItem(Repository repository, strin
return gitItemModel;
}

public static void InitializeRepository(string? path)
{
if (string.IsNullOrWhiteSpace(path))
return;

Repository.Init(path);
}

private static Commit? GetLastCommitForFile(Repository repository, string currentPath)
{
foreach (var currentCommit in repository.Commits)
Expand Down
6 changes: 6 additions & 0 deletions src/Files.App/Strings/en-US/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -3371,4 +3371,10 @@
<data name="AuthorizationSucceded">
<value>Great! You are now authorized.</value>
</data>
<data name="InitRepo" xml:space="preserve">
<value>Initialize repo</value>
</data>
<data name="InitRepoDescription" xml:space="preserve">
<value>Initialize a Git repository</value>
</data>
</root>

0 comments on commit 25b0155

Please sign in to comment.