Compare commits

...
6 changed files with 95 additions and 6 deletions

View file

@ -52,4 +52,30 @@ public class GitManager
throw new Exception($"Git repo already registered with the name {registrationName}");
}
public List<GitReg> ListRepos()
{
return _registrations.Select(x => new GitReg() { Name = x.Value.Name, Location = x.Value.Location }).ToList();
}
public string GetRepo(string? registeredName)
{
if (string.IsNullOrEmpty(registeredName))
{
throw new Exception("Name cannot be null");
}
if (_registrations.TryGetValue(registeredName, out var registration))
{
return registration.Location;
}
throw new Exception($"No git repo has been registered with the name {registeredName}");
}
}
public class GitReg
{
public required string Name { get; set; }
public required string Location { get; set; }
}

View file

@ -0,0 +1,17 @@
using System.Management.Automation;
using ModuleCore.Git;
namespace PowershellModule.Git.Commands;
[Cmdlet(VerbsCommon.Get, GitCommands.GitRepoNoun)]
public class ListGitRepoCommand : PSCmdlet
{
protected override void BeginProcessing()
{
var repos = GitManager.Instance.ListRepos();
WriteObject(repos);
base.BeginProcessing();
}
}

View file

@ -0,0 +1,6 @@
namespace PowershellModule.Git.Commands;
public class GitCommands
{
public const string GitRepoNoun = "GitRepo";
}

View file

@ -6,11 +6,9 @@ using ModuleCore.Git;
namespace PowershellModule.Git.Commands;
[Cmdlet(VerbsCommon.New, Noun)]
[Cmdlet(VerbsCommon.New, GitCommands.GitRepoNoun)]
public sealed class NewGitRepoCommand : PSCmdlet
{
private const string Noun = "GitRepo";
[Parameter(
Position = 0,
ValueFromPipeline = true,

View file

@ -4,11 +4,10 @@ using ModuleCore.Git;
namespace PowershellModule.Git.Commands;
[Cmdlet(VerbsCommon.Set, Noun)]
// TODO: decide if I want to use this verb instead of show. Currently this implementation is under Show-GitRepo
[Cmdlet(VerbsCommon.Set, GitCommands.GitRepoNoun)]
public class SetGitRepoCommand : PSCmdlet
{
private const string Noun = "GitRepo";
public SetGitRepoCommand()
{
Console.WriteLine($"{nameof(NewGitRepoCommand)} init");

View file

@ -0,0 +1,43 @@
using System;
using System.Management.Automation;
using ModuleCore.Git;
namespace PowershellModule.Git.Commands;
[Cmdlet(VerbsCommon.Show, GitCommands.GitRepoNoun)]
public class ShowGitRepoCommand : PSCmdlet
{
[Parameter(
Position = 0,
ValueFromPipeline = true,
Mandatory = true,
HelpMessage = "Reference name for the repo")]
public string? Name { get; set; }
[Parameter(
Mandatory = false,
HelpMessage = "Changes directory directly instead of using Set-Location")]
[Alias("NoSetLocation")]
public SwitchParameter NoStack { get; set; }
protected override void BeginProcessing()
{
var location = GitManager.Instance.GetRepo(Name);
// By default instead of doing the same as cd, we instead do pushd so a user can popd straight back to where
// they came from.
// TODO: incorporate this into the custom prompt when I develop that
if (!NoStack)
{
// Push the current location to the stack
// TODO: support named stacks. PowerShell *-Location commands support named stacks, but I don't personally
// use them myself so I haven't implemented them initially. I would like to in the future though, but right
// now it's low value to me.
// https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-location?view=powershell-7.6#example-4-set-the-current-location-to-a-named-stack
SessionState.Path.PushCurrentLocation(null);
}
SessionState.Path.SetLocation(location);
base.BeginProcessing();
}
}