Skip to content

Commit

Permalink
Remove multi select
Browse files Browse the repository at this point in the history
  • Loading branch information
coenm committed Aug 25, 2023
1 parent 94b2317 commit 9421a58
Show file tree
Hide file tree
Showing 23 changed files with 98 additions and 265 deletions.
2 changes: 1 addition & 1 deletion src/RepoM.Api/Git/IRepositoryActionProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ public interface IRepositoryActionProvider

RepositoryActionBase? GetSecondaryAction(Repository repository);

IEnumerable<RepositoryActionBase> GetContextMenuActions(IEnumerable<Repository> repositories);
IEnumerable<RepositoryActionBase> GetContextMenuActions(Repository repository);
}
14 changes: 6 additions & 8 deletions src/RepoM.Api/IO/DefaultRepositoryActionProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,27 +26,25 @@ public DefaultRepositoryActionProvider(

public RepositoryActionBase? GetPrimaryAction(Repository repository)
{
return GetContextMenuActions(new[] { repository, }).FirstOrDefault();
return GetContextMenuActions(repository).FirstOrDefault();
}

public RepositoryActionBase? GetSecondaryAction(Repository repository)
{
RepositoryActionBase[] actions = GetContextMenuActions(new[] { repository, }).Take(2).ToArray();
RepositoryActionBase[] actions = GetContextMenuActions(repository).Take(2).ToArray();
return actions.Length > 1 ? actions[1] : null;
}

public IEnumerable<RepositoryActionBase> GetContextMenuActions(IEnumerable<Repository> repositories)
public IEnumerable<RepositoryActionBase> GetContextMenuActions(Repository repository)
{
return GetContextMenuActionsInternal(repositories.Where(r => _fileSystem.Directory.Exists(r.SafePath))).Where(a => a != null);
return GetContextMenuActionsInternal(repository);
}

private IEnumerable<RepositoryActionBase> GetContextMenuActionsInternal(IEnumerable<Repository> repos)
private IEnumerable<RepositoryActionBase> GetContextMenuActionsInternal(Repository repository)
{
Repository[] repositories = repos.ToArray();

try
{
return _repoSpecificConfig.CreateActions(repositories);
return _repoSpecificConfig.CreateActions(repository);
}
catch (Exception ex)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,9 @@ public ActionDeserializerComposition(IEnumerable<IActionDeserializer> deserializ

public RepositoryAction? DeserializeSingleAction(string type, JToken jToken, JsonSerializer jsonSerializer)
{
RepositoryAction? result = DeserializeWithCustomDeserializers(type, jToken, jsonSerializer)
??
DeserializeWithDefaultDeserializers(type, jToken, jsonSerializer);

if (result == null)
{
return null;
}

JToken? multiSelectEnabledToken = jToken["multi-select-enabled"];

if (multiSelectEnabledToken != null)
{
result.MultiSelectEnabled = multiSelectEnabledToken.Value<string>();
}

return result;
return DeserializeWithCustomDeserializers(type, jToken, jsonSerializer)
??
DeserializeWithDefaultDeserializers(type, jToken, jsonSerializer);
}

private RepositoryAction? DeserializeWithCustomDeserializers(string type, JToken jToken, JsonSerializer jsonSerializer)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,6 @@ namespace RepoM.Api.IO.ModuleBasedRepositoryActionProvider.Data;
[PropertyDefaultBoolValue(true)]
public string? Active { get; set; }

/// <summary>
/// Multiselect enabled.
/// </summary>
[EvaluatedProperty]
[PropertyType(typeof(bool))] // todo
[PropertyDefaultBoolValue(false)]
public string? MultiSelectEnabled { get; set; }

/// <summary>
/// A set of variables to be availabe within this action.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,21 +78,13 @@ private string GetRepositoryActionsFilename(string basePath)
throw new ConfigurationFileNotFoundException(filename);
}

public (Dictionary<string, string>? envVars, List<EvaluatedVariable>? Variables, List<ActionsCollection>? actions, List<TagsCollection>? tags) Get(params IRepository[] repositories)
public (Dictionary<string, string>? envVars, List<EvaluatedVariable>? Variables, List<ActionsCollection>? actions, List<TagsCollection>? tags) Get(IRepository repository)
{
if (!repositories.Any())
{
return (null, null, null, null);
}

IRepository? repository = repositories.FirstOrDefault(); //todo
if (repository == null)
{
return (null, null, null, null);
}

var multipleRepositoriesSelected = repositories.Length > 1;

var variables = new List<EvaluatedVariable>();
Dictionary<string, string>? envVars = null;
var actions = new List<ActionsCollection>();
Expand Down Expand Up @@ -166,88 +158,82 @@ List<EvaluatedVariable> EvaluateVariables(IEnumerable<Variable>? vars)
variables.AddRange(list);
using IDisposable rootVariables = RepoMVariableProviderStore.Push(list);

if (!multipleRepositoriesSelected)
// load repo specific environment variables
foreach (FileReference fileRef in rootFile.RepositorySpecificEnvironmentFiles.Where(fileRef => fileRef != null))
{
// load repo specific environment variables
foreach (FileReference fileRef in rootFile.RepositorySpecificEnvironmentFiles.Where(fileRef => fileRef != null))
if (!IsEnabled(fileRef.When, true, repository))
{
if (!IsEnabled(fileRef.When, true, repository))
{
continue;
}
continue;
}

var f = EvaluateString(fileRef.Filename, repository);
if (!_fileSystem.File.Exists(f))
{
// log warning?
continue;
}

var f = EvaluateString(fileRef.Filename, repository);
if (!_fileSystem.File.Exists(f))
try
{
IDictionary<string, string> currentEnvVars = _envFileStore.TryGet(f);
if (envVars == null || !envVars.Any())
{
// log warning?
envVars = currentEnvVars.ToDictionary();
continue;
}

try
foreach (KeyValuePair<string, string> item in currentEnvVars)
{
IDictionary<string, string> currentEnvVars = _envFileStore.TryGet(f);
if (envVars == null || !envVars.Any())
if (!envVars.ContainsKey(item.Key))
{
envVars = currentEnvVars.ToDictionary();
continue;
envVars.Add(item.Key, item.Value);
}

foreach (KeyValuePair<string, string> item in currentEnvVars)
else
{
if (!envVars.ContainsKey(item.Key))
{
envVars.Add(item.Key, item.Value);
}
else
{
_logger.LogTrace("Environment key was '{Key}' already set.", item.Key);
}
_logger.LogTrace("Environment key was '{Key}' already set.", item.Key);
}
}
catch (Exception e)
{
_logger.LogWarning(e, "Something went wrong loading an environment file");
}
}
catch (Exception e)
{
_logger.LogWarning(e, "Something went wrong loading an environment file");
}
}

using IDisposable repoSpecificEnvVariables = EnvironmentVariableStore.Set(envVars ?? new Dictionary<string, string>(0));

if (!multipleRepositoriesSelected)
// load repo specific config
foreach (FileReference fileRef in rootFile.RepositorySpecificConfigFiles)
{
// load repo specific config
foreach (FileReference fileRef in rootFile.RepositorySpecificConfigFiles)
if (repoSpecificConfig != null)
{
if (repoSpecificConfig != null)
{
continue;
}
continue;
}

if (fileRef == null || !IsEnabled(fileRef.When, true, repository))
{
continue;
}
if (fileRef == null || !IsEnabled(fileRef.When, true, repository))
{
continue;
}

var f = EvaluateString(fileRef.Filename, repository);
if (!_fileSystem.File.Exists(f))
{
// warning
continue;
}
var f = EvaluateString(fileRef.Filename, repository);
if (!_fileSystem.File.Exists(f))
{
// warning
continue;
}

// todo redirect
// todo redirect

try
{
repoSpecificConfig = _repositoryActionsFileStore.TryGet(filename);
}
catch (Exception)
{
// warning.
}
try
{
repoSpecificConfig = _repositoryActionsFileStore.TryGet(filename);
}
catch (Exception)
{
// warning.
}
}

List<EvaluatedVariable> list2 = EvaluateVariables(repoSpecificConfig?.Variables);
variables.AddRange(list2);
using IDisposable repoSpecificVariables = RepoMVariableProviderStore.Push(list2);
Expand Down Expand Up @@ -406,18 +392,11 @@ public RepositorySpecificConfiguration(
_repoConfigReader = repoConfigReader ?? throw new ArgumentNullException(nameof(repoConfigReader));
}

public IEnumerable<RepositoryActionBase> CreateActions(params Repository[] repositories)
public IEnumerable<RepositoryActionBase> CreateActions(Repository repository)
{
if (repositories == null)
{
throw new ArgumentNullException(nameof(repositories));
}

Repository? singleRepository = null;
var multiSelectRequired = repositories.Length > 1;
if (!multiSelectRequired)
if (repository == null)
{
singleRepository = repositories.FirstOrDefault();
throw new ArgumentNullException(nameof(repository));
}

Dictionary<string, string>? repositoryEnvVars = null;
Expand All @@ -426,7 +405,7 @@ public IEnumerable<RepositoryActionBase> CreateActions(params Repository[] repos
Exception? ex = null;
try
{
(repositoryEnvVars, variables, actions, _) = _repoConfigReader.Get(repositories);
(repositoryEnvVars, variables, actions, _) = _repoConfigReader.Get(repository);
}
catch (Exception e)
{
Expand All @@ -437,14 +416,14 @@ public IEnumerable<RepositoryActionBase> CreateActions(params Repository[] repos
{
if (ex is ConfigurationFileNotFoundException configurationFileNotFoundException)
{
foreach (RepositoryAction failingItem in CreateFailing(configurationFileNotFoundException, configurationFileNotFoundException.Filename, singleRepository!)) // todo coenm
foreach (RepositoryAction failingItem in CreateFailing(configurationFileNotFoundException, configurationFileNotFoundException.Filename, repository)) // todo coenm
{
yield return failingItem;
}
}
else
{
foreach (RepositoryAction failingItem in CreateFailing(ex, null, singleRepository!)) // todo coenm
foreach (RepositoryAction failingItem in CreateFailing(ex, null, repository)) // todo coenm
{
yield return failingItem;
}
Expand All @@ -459,22 +438,13 @@ public IEnumerable<RepositoryActionBase> CreateActions(params Repository[] repos
// load variables global
foreach (ActionsCollection actionsCollection in ((IEnumerable<ActionsCollection>?)actions) ?? Array.Empty<ActionsCollection>())
{
using IDisposable d3 = RepoMVariableProviderStore.Push(EvaluateVariables(actionsCollection.Variables, singleRepository));
using IDisposable d3 = RepoMVariableProviderStore.Push(EvaluateVariables(actionsCollection.Variables, repository));

foreach (Data.RepositoryAction action in actionsCollection.Actions)
{
using IDisposable d4 = RepoMVariableProviderStore.Push(EvaluateVariables(action.Variables, singleRepository));

if (multiSelectRequired)
{
var actionNotCapableForMultipleRepos = Array.Exists(repositories, repo => !IsEnabled(action.MultiSelectEnabled, false, repo));
if (actionNotCapableForMultipleRepos)
{
continue;
}
}
using IDisposable d4 = RepoMVariableProviderStore.Push(EvaluateVariables(action.Variables, repository));

IEnumerable<RepositoryActionBase> result = _actionMapper.Map(action, repositories);
IEnumerable<RepositoryActionBase> result = _actionMapper.Map(action, repository);

foreach (RepositoryActionBase singleItem in result)
{
Expand Down
2 changes: 1 addition & 1 deletion src/RepoM.App/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@
ContextMenuOpening="LstRepositories_ContextMenuOpening"
VerticalAlignment="Top"
VerticalContentAlignment="Top"
SelectionMode="Extended"
SelectionMode="Single"
Margin="0,10,0,0"
ScrollViewer.CanContentScroll="False"
>
Expand Down
Loading

0 comments on commit 9421a58

Please sign in to comment.