Browse Source

Add version filtering option to ls-remote (#190)

Fixes #188
remotes/origin/add-simple-redirecting-site
Corentin Leruth 5 years ago committed by GitHub
parent
commit
59ed1fc6ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      executable/FnmApp.re
  2. 30
      executable/ListRemote.re
  3. 1
      test/TestFnm.re
  4. 116
      test/TestListRemote.re

11
executable/FnmApp.re

@ -14,7 +14,7 @@ module Commands = {
let use = (version, quiet) => Use.run(~version, ~quiet) |> runCmd; let use = (version, quiet) => Use.run(~version, ~quiet) |> runCmd;
let alias = (version, name) => Alias.run(~name, ~version) |> runCmd; let alias = (version, name) => Alias.run(~name, ~version) |> runCmd;
let default = version => Alias.run(~name="default", ~version) |> runCmd; let default = version => Alias.run(~name="default", ~version) |> runCmd;
let listRemote = () => ListRemote.run() |> runCmd; let listRemote = version => ListRemote.run(~version) |> runCmd;
let listLocal = () => ListLocal.run() |> runCmd; let listLocal = () => ListLocal.run() |> runCmd;
let install = version => Install.run(~version) |> runCmd; let install = version => Install.run(~version) |> runCmd;
let uninstall = version => Uninstall.run(~version) |> runCmd; let uninstall = version => Uninstall.run(~version) |> runCmd;
@ -146,8 +146,15 @@ let listRemote = {
let sdocs = Manpage.s_common_options; let sdocs = Manpage.s_common_options;
let man = help_secs; let man = help_secs;
let selectedVersion = {
let doc = "Filter by specific $(docv).";
Arg.(
value & pos(0, some(string), None) & info([], ~docv="VERSION", ~doc)
);
};
( (
Term.(app(const(Commands.listRemote), const())), Term.(const(Commands.listRemote) $ selectedVersion),
Term.info( Term.info(
"ls-remote", "ls-remote",
~version, ~version,

30
executable/ListRemote.re

@ -1,11 +1,35 @@
open Fnm; open Fnm;
let run = () => { let run = (~version as maybeVersionName) => {
Console.log("Looking for some node versions upstream..."); Console.log("Looking for some node versions upstream...");
let%lwt versions = Versions.getRemoteVersions() let%lwt versions = Versions.getRemoteVersions()
and currentVersion = Versions.getCurrentVersion(); and currentVersion = Versions.getCurrentVersion();
let versions =
switch (maybeVersionName) {
| None => versions
| Some(versionName) =>
let formattedVersionName = Versions.format(versionName);
versions
|> Versions.(
List.filter(v =>
isVersionFitsPrefix(formattedVersionName, Remote.(v.name))
|| v.name == formattedVersionName
)
);
};
switch (versions) {
| [] =>
Console.log(
<Pastel color=Pastel.Red>
"No versions found that match your criterias."
</Pastel>,
);
Lwt.return_error(1);
| _ =>
versions versions
|> List.iter(version => { |> List.iter(version => {
open Versions.Remote; open Versions.Remote;
@ -18,9 +42,9 @@ let run = () => {
| (_, true) => Some(Pastel.Green) | (_, true) => Some(Pastel.Green)
| (_, false) => None | (_, false) => None
}; };
();
Console.log(<Pastel ?color> str </Pastel>); Console.log(<Pastel ?color> str </Pastel>);
}); });
Lwt.return_ok(); Lwt.return_ok();
}; };
};

1
test/TestFnm.re

@ -1,5 +1,6 @@
include SmokeTest; include SmokeTest;
include TestSemver; include TestSemver;
include TestFs; include TestFs;
include TestListRemote;
TestFramework.cli(); TestFramework.cli();

116
test/TestListRemote.re

@ -0,0 +1,116 @@
open TestFramework;
let allVersions6 = [
"v6.0.0",
"v6.1.0",
"v6.2.0",
"v6.2.1",
"v6.2.2",
"v6.3.0",
"v6.3.1",
"v6.4.0",
"v6.5.0",
"v6.6.0",
"v6.7.0",
"v6.8.0",
"v6.8.1",
"v6.9.0",
"v6.9.1",
"v6.9.2",
"v6.9.3",
"v6.9.4",
"v6.9.5",
"v6.10.0",
"v6.10.1",
"v6.10.2",
"v6.10.3",
"v6.11.0",
"v6.11.1",
"v6.11.2",
"v6.11.3",
"v6.11.4",
"v6.11.5",
"v6.12.0",
"v6.12.1",
"v6.12.2",
"v6.12.3",
"v6.13.0",
"v6.13.1",
"v6.14.0",
"v6.14.1",
"v6.14.2",
"v6.14.3",
"v6.14.4",
"v6.15.0",
"v6.15.1",
"v6.16.0",
"v6.17.0",
"v6.17.1",
];
let allVersions6_11 = [
"v6.11.0",
"v6.11.1",
"v6.11.2",
"v6.11.3",
"v6.11.4",
"v6.11.5",
];
describe("List Remote", ({test}) => {
let versionRegExp = Str.regexp(".*[0-9]+\.[0-9]+\.[0-9]+\|.*latest-*");
let filterVersionNumbers = response =>
response
|> String.split_on_char('\n')
|> List.filter(s => Str.string_match(versionRegExp, s, 0))
|> List.map(s => Str.replace_first(Str.regexp("\*"), "", s))
|> List.map(String.trim);
let runAndFilterVersionNumbers = args => run(args) |> filterVersionNumbers;
test("Should display remote versions matching a major version", ({expect}) => {
let versionNumbers = runAndFilterVersionNumbers([|"ls-remote", "6"|]);
expect.lines(versionNumbers).toEqualLines(allVersions6);
});
test(
"Should display remote versions matching a major and minor version",
({expect}) => {
let versionNumbers = runAndFilterVersionNumbers([|"ls-remote", "6.11"|]);
expect.lines(versionNumbers).toEqualLines(allVersions6_11);
});
test(
"Should display remote version matching a specific version", ({expect}) => {
let versionNumbers =
runAndFilterVersionNumbers([|"ls-remote", "6.11.3"|]);
expect.int(versionNumbers |> List.length).toBe(1);
expect.lines(versionNumbers).toEqual("v6.11.3");
});
test("Should display latest remote version", ({expect}) => {
let versionNumbers =
runAndFilterVersionNumbers([|"ls-remote", "latest"|]);
expect.int(versionNumbers |> List.length).toBe(1);
expect.lines(versionNumbers).toEqual("latest");
});
test("Should display latest specific remote version", ({expect}) => {
let versionNumbers =
runAndFilterVersionNumbers([|"ls-remote", "latest-v6"|]);
expect.int(versionNumbers |> List.length).toBe(1);
expect.lines(versionNumbers).toEqual("latest-v6.x");
});
test(
"Should display an error message if version does not exist", ({expect}) => {
let result = run([|"ls-remote", "190385"|]);
let versionNumbers = result |> filterVersionNumbers;
expect.int(versionNumbers |> List.length).toBe(0);
expect.string(result).toMatch(".*No versions found.*");
});
});
Loading…
Cancel
Save