Skip to content

Commit

Permalink
Merge pull request #1134 from mjbvz/remove-npm-bin-and-supporting-glo…
Browse files Browse the repository at this point in the history
…bal-package-logic

Remove npm bin Command and Supporting Global Package Logic
  • Loading branch information
mjbvz committed Jul 13, 2016
2 parents bfb1a5b + 3a7f2da commit 94b1142
Show file tree
Hide file tree
Showing 24 changed files with 54 additions and 513 deletions.
32 changes: 4 additions & 28 deletions Nodejs/Product/Nodejs/NpmUI/NpmOutputViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -180,12 +180,6 @@ class NpmOutputViewModel : INotifyPropertyChanged, IDisposable {
QueueCommand(new QueuedNpmCommandInfo(name, version, type));
}

public void QueueInstallGlobalPackage(
string name,
string version) {
QueueCommand(new QueuedNpmCommandInfo(name, version));
}

private async void Execute(QueuedNpmCommandInfo info) {
IsExecutingCommand = true;
INpmCommander cmdr = null;
Expand All @@ -201,11 +195,7 @@ class NpmOutputViewModel : INotifyPropertyChanged, IDisposable {

if (info.IsFreeformArgumentCommand) {
await cmdr.ExecuteNpmCommandAsync(info.Arguments);
} else if (info.IsGlobalInstall) {
await cmdr.InstallGlobalPackageByVersionAsync(
info.Name,
info.Version);
} else {
} else {
await cmdr.InstallPackageByVersionAsync(
info.Name,
info.Version,
Expand Down Expand Up @@ -376,29 +366,16 @@ class NpmOutputViewModel : INotifyPropertyChanged, IDisposable {
}

private class QueuedNpmCommandInfo : EventArgs {

public QueuedNpmCommandInfo(
string arguments) {
public QueuedNpmCommandInfo(string arguments) {
Name = arguments;
IsFreeformArgumentCommand = true;
}

public QueuedNpmCommandInfo(
string name,
string version) {
public QueuedNpmCommandInfo(string name,string version, DependencyType depType) {
Name = name;
Version = version;
IsGlobalInstall = true;
IsFreeformArgumentCommand = false;
}

public QueuedNpmCommandInfo(
string name,
string version,
DependencyType depType)
: this(name, version) {
DependencyType = depType;
IsGlobalInstall = false;
}

public bool IsFreeformArgumentCommand { get; private set; }
Expand All @@ -408,7 +385,6 @@ private class QueuedNpmCommandInfo : EventArgs {
public string Name { get; private set; }
public string Version { get; private set; }
public DependencyType DependencyType { get; private set; }
public bool IsGlobalInstall { get; private set; }

public bool Equals(QueuedNpmCommandInfo other) {
return null != other && StringComparer.CurrentCulture.Compare(ToString(), other.ToString()) == 0;
Expand All @@ -431,7 +407,7 @@ private class QueuedNpmCommandInfo : EventArgs {
Name,
Version,
DependencyType,
IsGlobalInstall,
false,
true));
}
return buff.ToString();
Expand Down
25 changes: 3 additions & 22 deletions Nodejs/Product/Nodejs/NpmUI/NpmPackageInstallViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,7 @@ internal class NpmPackageInstallViewModel : INotifyPropertyChanged {
internal enum Indices {
IndexStandard = 0,
IndexDev = 1,
IndexOptional = 2,
IndexGlobal = 3
IndexOptional = 2
}

internal enum FilterState {
Expand Down Expand Up @@ -340,18 +339,14 @@ Dispatcher dispatcher

if (filtered.Any()) {
IRootPackage rootPackage = null;
IGlobalPackages globalPackages = null;
var controller = _npmController;
if (controller != null) {
rootPackage = controller.RootPackage;
globalPackages = controller.GlobalPackages;
}

newItems.AddRange(filtered.Select(package => new ReadOnlyPackageCatalogEntryViewModel(
package,
rootPackage != null ? rootPackage.Modules[package.Name] : null,
globalPackages != null ? globalPackages.Modules[package.Name] : null
)));
rootPackage != null ? rootPackage.Modules[package.Name] : null)));
}

await _dispatcher.BeginInvoke((Action)(() => {
Expand Down Expand Up @@ -408,7 +403,6 @@ Dispatcher dispatcher
set {
_selectedDependencyTypeIndex = value;
OnPropertyChanged();
OnPropertyChanged("GlobalWarningVisibility");
}
}

Expand All @@ -420,21 +414,12 @@ Dispatcher dispatcher
}
}

public Visibility GlobalWarningVisibility {
get {
return Indices.IndexGlobal == (Indices) SelectedDependencyTypeIndex
? Visibility.Visible
: Visibility.Collapsed;
}
}

internal bool CanInstall(PackageCatalogEntryViewModel package) {
return package != null;
}

internal void Install(PackageCatalogEntryViewModel package) {
var type = DependencyType.Standard;
var isGlobal = false;
switch ((Indices)SelectedDependencyTypeIndex) {
case Indices.IndexDev:
type = DependencyType.Development;
Expand All @@ -443,10 +428,6 @@ Dispatcher dispatcher
case Indices.IndexOptional:
type = DependencyType.Optional;
break;

case Indices.IndexGlobal:
isGlobal = true;
break;
}

if (!string.IsNullOrEmpty(package.Name)) {
Expand All @@ -456,7 +437,7 @@ Dispatcher dispatcher
package.Name,
selectedVersion,
type,
isGlobal,
false,
SaveToPackageJson,
Arguments));
}
Expand Down
33 changes: 0 additions & 33 deletions Nodejs/Product/Nodejs/NpmUI/NpmPackageInstallWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -158,22 +158,6 @@
Visibility="Collapsed">
<Run xml:space="preserve">; </Run>
</TextBlock>

<TextBlock Grid.Column="3"
x:Name="GlobalInstallMessage"
Visibility="Collapsed"
FontWeight="Bold">
Installed globally
</TextBlock>
<TextBlock Grid.Column="3"
x:Name="GlobalInstallOutOfDateMessage"
Visibility="Collapsed"
FontWeight="Bold"
Foreground="Red">
<Run>Old version</Run>
<Run Text="{Binding GlobalVersion,Mode=OneWay}" />
<Run>installed globally</Run>
</TextBlock>
</Grid>

<Separator Grid.Row="3" Margin="0 4 0 2" />
Expand All @@ -187,17 +171,9 @@
<Setter TargetName="LocalInstallMessage" Property="Visibility" Value="Collapsed" />
<Setter TargetName="LocalInstallOutOfDateMessage" Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding IsInstalledGlobally}" Value="true">
<Setter TargetName="GlobalInstallMessage" Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding IsGlobalInstallOutOfDate}" Value="true">
<Setter TargetName="GlobalInstallMessage" Property="Visibility" Value="Collapsed" />
<Setter TargetName="GlobalInstallOutOfDateMessage" Property="Visibility" Value="Visible" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsInstalledLocally}" Value="true" />
<Condition Binding="{Binding IsInstalledGlobally}" Value="true" />
</MultiDataTrigger.Conditions>
<Setter TargetName="InstallMessageSeparator" Property="Visibility" Value="Visible" />
</MultiDataTrigger>
Expand Down Expand Up @@ -447,14 +423,6 @@
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border Style="{StaticResource TooltipBorder}"
Visibility="{Binding GlobalWarningVisibility}" Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="2">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Stretch"
Foreground="{DynamicResource {x:Static wpf:Controls.TooltipTextKey}}" TextWrapping="Wrap">
<Run FontWeight="Bold">Warning:</Run> Global installs
will affect other apps that use packages via 'npm link'.
</TextBlock>
</Border>

<TextBlock Grid.Row="1" FontWeight="Bold" Margin="0 4 0 4">Options</TextBlock>
<Label Grid.Row="5" HorizontalAlignment="Right" VerticalAlignment="Center">Other npm arguments</Label>
Expand All @@ -474,7 +442,6 @@
<ComboBoxItem Tag="St" IsSelected="True">Standard</ComboBoxItem>
<ComboBoxItem Tag="Dev">Development</ComboBoxItem>
<ComboBoxItem Tag="Opt">Optional</ComboBoxItem>
<ComboBoxItem Tag="Global">Global</ComboBoxItem>
</ComboBox>

<Label Grid.Row="4" HorizontalAlignment="Right" VerticalAlignment="Center">Selected version</Label>
Expand Down
4 changes: 2 additions & 2 deletions Nodejs/Product/Nodejs/NpmUI/NpmPackageInstallWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ sealed partial class NpmPackageInstallWindow : DialogWindowVersioningWorkaround,
private readonly NpmPackageInstallViewModel _vm;
private NpmOutputWindow _outputWindow;

internal NpmPackageInstallWindow(INpmController controller, NpmOutputViewModel executeVm, DependencyType dependencyType = DependencyType.Standard, bool isGlobal = false) {
internal NpmPackageInstallWindow(INpmController controller, NpmOutputViewModel executeVm, DependencyType dependencyType = DependencyType.Standard) {
DataContext = _vm = new NpmPackageInstallViewModel(executeVm, Dispatcher);
_vm.NpmController = controller;
InitializeComponent();
DependencyComboBox.SelectedIndex = isGlobal ? (int)NpmPackageInstallViewModel.Indices.IndexGlobal : (int)dependencyType;
DependencyComboBox.SelectedIndex = (int)dependencyType;
}

public void Dispose() {
Expand Down
25 changes: 5 additions & 20 deletions Nodejs/Product/Nodejs/NpmUI/PackageCatalogEntryViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ abstract class PackageCatalogEntryViewModel {
private readonly List<string> _homepages;
private readonly string _keywords;

private readonly SemverVersion? _localVersion, _globalVersion;
private readonly SemverVersion? _localVersion;

protected PackageCatalogEntryViewModel(
string name,
Expand All @@ -41,8 +41,7 @@ abstract class PackageCatalogEntryViewModel {
string description,
IEnumerable<string> homepages,
string keywords,
SemverVersion? localVersion,
SemverVersion? globalVersion
SemverVersion? localVersion
) {
_name = name;
_version = version;
Expand All @@ -52,7 +51,6 @@ abstract class PackageCatalogEntryViewModel {
_homepages = homepages != null ? homepages.ToList() : new List<string>();
_keywords = keywords;
_localVersion = localVersion;
_globalVersion = globalVersion;
}

public virtual string Name {
Expand Down Expand Up @@ -93,33 +91,21 @@ abstract class PackageCatalogEntryViewModel {
get { return _localVersion.HasValue; }
}

public bool IsInstalledGlobally {
get { return _globalVersion.HasValue; }
}

public bool IsLocalInstallOutOfDate {
get { return _localVersion.HasValue && _localVersion < _version; }
}

public bool IsGlobalInstallOutOfDate {
get { return _globalVersion.HasValue && _globalVersion < _version; }
}

public string LocalVersion {
get { return ToString(_localVersion); }
}

public string GlobalVersion {
get { return ToString(_globalVersion); }
}


private static string ToString(SemverVersion? version) {
return version.HasValue ? version.ToString() : string.Empty;
}
}

internal class ReadOnlyPackageCatalogEntryViewModel : PackageCatalogEntryViewModel {
public ReadOnlyPackageCatalogEntryViewModel(IPackage package, IPackage localInstall, IPackage globalInstall)
public ReadOnlyPackageCatalogEntryViewModel(IPackage package, IPackage localInstall)
: base(
package.Name ?? string.Empty,
package.Version,
Expand All @@ -130,8 +116,7 @@ public ReadOnlyPackageCatalogEntryViewModel(IPackage package, IPackage localInst
(package.Keywords != null && package.Keywords.Any())
? string.Join(", ", package.Keywords)
: SR.GetString(SR.NoKeywordsInPackage),
localInstall != null ? (SemverVersion?)localInstall.Version : null,
globalInstall != null ? (SemverVersion?)globalInstall.Version : null
localInstall != null ? (SemverVersion?)localInstall.Version : null
) {
if (string.IsNullOrEmpty(Name)) {
throw new ArgumentNullException("package.Name");
Expand Down
4 changes: 1 addition & 3 deletions Nodejs/Product/Nodejs/Project/DependencyNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,7 @@ internal class DependencyNode : HierarchyNode {
if (null == _parent) {
switch (cmd) {
case PkgCmdId.cmdidNpmInstallSingleMissingModule:
if (GetPropertiesObject().IsGlobalInstall) {
result = QueryStatusResult.SUPPORTED | QueryStatusResult.INVISIBLE;
} else if (null == _projectNode.ModulesNode
if (null == _projectNode.ModulesNode
|| _projectNode.ModulesNode.IsCurrentStateASuppressCommandsMode()) {
result = QueryStatusResult.SUPPORTED;
} else {
Expand Down
40 changes: 2 additions & 38 deletions Nodejs/Product/Nodejs/Project/DependencyNodeProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,8 @@ public class DependencyNodeProperties : NodeProperties {

public override string GetClassName() {
return SR.GetString(IsSubPackage
? (IsGlobalInstall ? SR.PropertiesClassGlobalSubPackage : SR.PropertiesClassLocalSubPackage)
: (IsGlobalInstall ? SR.PropertiesClassGlobalPackage : SR.PropertiesClassLocalPackage)
);
? SR.PropertiesClassLocalSubPackage
: SR.PropertiesClassLocalPackage);
}

[SRCategoryAttribute(SR.General)]
Expand Down Expand Up @@ -141,12 +140,6 @@ public class DependencyNodeProperties : NodeProperties {
}
}

internal bool IsGlobalInstall {
get {
return false;
}
}

internal bool IsSubPackage {
get {
var node = DependencyNode as HierarchyNode;
Expand All @@ -162,12 +155,6 @@ public class DependencyNodeProperties : NodeProperties {
[SRDescriptionAttribute(SR.NpmPackageTypeDescription)]
public string PackageType {
get {
if (IsGlobalInstall) {
return IsSubPackage
? SR.GetString(SR.PackageTypeGlobalSubpackage)
: SR.GetString(SR.PackageTypeGlobal);
}

return IsSubPackage
? SR.GetString(SR.PackageTypeLocalSubpackage)
: SR.GetString(SR.PackageTypeLocal);
Expand All @@ -183,29 +170,6 @@ public class DependencyNodeProperties : NodeProperties {
if (IsSubPackage) {
return SR.GetString(SR.LinkStatusNotApplicableSubPackages);
}

var package = Package;
var controller = DependencyNode.NpmController;
if (null != controller && null != package) {
if (IsGlobalInstall) {
var root = controller.RootPackage;
if (null != root) {
var local = root.Modules[package.Name];
return null == local || local.Version != package.Version
? SR.GetString(SR.LinkStatusNotLinkedToProject)
: SR.GetString(SR.LinkStatusLinkedToProject);
}
} else {
var global = controller.GlobalPackages;
if (null != global) {
var installed = global.Modules[package.Name];
return null == installed || installed.Version != package.Version
? SR.GetString(SR.LinkStatusLocallyInstalled)
: SR.GetString(SR.LinkStatusLinkedFromGlobal);
}
}
}

return SR.GetString(SR.LinkStatusUnknown);
}
}
Expand Down

0 comments on commit 94b1142

Please sign in to comment.