Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,57 @@ steps = [
{ argv = ["vp", "remove", "-g", "env-binary-conflict-pkg-b"], comment = "Cleanup", continue-on-failure = true },
{ argv = ["vpt", "stat-file", "$VP_HOME/bins/env-binary-conflict-cli.json", "--assert", "missing"], comment = "Bin config should be deleted", continue-on-failure = true },
]

[[case]]
name = "env_install_without_backup_storage"
vp = "global"
skip-platforms = ["windows"]
steps = [
["vpt", "mkdir", "readonly-tmp"],
["vpt", "chmod", "555", "readonly-tmp"],
["vpt", "json-edit", "env-binary-conflict-pkg-a/package.json", "bin", "{}"],
{ argv = ["vp", "install", "-g", "./env-binary-conflict-pkg-a"], envs = [["TMPDIR", "${workspace}/readonly-tmp"]], comment = "A package without binaries needs no rollback storage" },
["vpt", "stat-file", "$VP_HOME/packages/env-binary-conflict-pkg-a.json", "--assert", "file"],
{ argv = ["vp", "install", "-g", "./env-binary-conflict-pkg-b"], envs = [["TMPDIR", "${workspace}/readonly-tmp"]], comment = "New binaries need no backup of existing files" },
["env-binary-conflict-cli"],
["vpt", "stat-file", "$VP_HOME/bins/env-binary-conflict-cli.json", "--assert", "file"],
]
after = [["vpt", "chmod", "755", "readonly-tmp"]]

[[case]]
name = "env_install_rollback_preserves_existing_files"
vp = "global"
skip-platforms = ["windows"]
steps = [
["vpt", "json-edit", "env-binary-conflict-pkg-a/package.json", "bin", "{\"aaa-rollback-cli\":\"./cli.js\",\"zzz-rollback-cli\":\"./cli.js\"}"],
["vpt", "write-file", "$VP_HOME/bin/aaa-rollback-cli", "#!/bin/sh\necho original-first\n"],
["vpt", "write-file", "$VP_HOME/bin/zzz-rollback-cli", "#!/bin/sh\necho original-unattempted\n"],
["vpt", "chmod", "+x", "$VP_HOME/bin/aaa-rollback-cli"],
["vpt", "chmod", "+x", "$VP_HOME/bin/zzz-rollback-cli"],
{ argv = ["vp", "install", "-g", "./env-binary-conflict-pkg-a"], comment = "A regular file prevents shim creation without authorizing rollback to delete existing files", continue-on-failure = true },
{ argv = ["vpt", "stat-file", "$VP_HOME/bin/aaa-rollback-cli", "--assert", "file"], continue-on-failure = true },
["aaa-rollback-cli"],
["vpt", "stat-file", "$VP_HOME/bin/zzz-rollback-cli", "--assert", "file"],
["zzz-rollback-cli"],
["vpt", "stat-file", "$VP_HOME/packages/env-binary-conflict-pkg-a.json", "--assert", "missing"],
["vpt", "stat-file", "$VP_HOME/bins/aaa-rollback-cli.json", "--assert", "missing"],
["vpt", "stat-file", "$VP_HOME/bins/zzz-rollback-cli.json", "--assert", "missing"],
]

[[case]]
name = "env_install_rollback_restores_npm_owner"
vp = "global"
skip-platforms = ["windows"]
steps = [
{ tty = false, argv = ["npm", "install", "-g", "./env-binary-conflict-pkg-a"] },
["vpt", "print-file", "$VP_HOME/bins/env-binary-conflict-cli.json"],
["vpt", "json-edit", "env-binary-conflict-pkg-a/package.json", "bin.zzz-rollback-cli", "./cli.js"],
["vpt", "mkdir", "$VP_HOME/bin/zzz-rollback-cli"],
{ argv = ["vp", "install", "-g", "./env-binary-conflict-pkg-a"], comment = "A failure after replacing the npm link must restore the link and its ownership", continue-on-failure = true },
{ argv = ["vpt", "stat-file", "$VP_HOME/bin/env-binary-conflict-cli", "--assert", "symlink"], continue-on-failure = true },
["env-binary-conflict-cli"],
["vpt", "print-file", "$VP_HOME/bins/env-binary-conflict-cli.json"],
["vpt", "stat-file", "$VP_HOME/bin/zzz-rollback-cli", "--assert", "dir"],
["vpt", "stat-file", "$VP_HOME/packages/env-binary-conflict-pkg-a.json", "--assert", "missing"],
["vpt", "stat-file", "$VP_HOME/bins/zzz-rollback-cli.json", "--assert", "missing"],
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# env_install_rollback_preserves_existing_files

## `vpt json-edit env-binary-conflict-pkg-a/package.json bin '{"aaa-rollback-cli":"./cli.js","zzz-rollback-cli":"./cli.js"}'`

```
```

## `vpt write-file $VP_HOME/bin/aaa-rollback-cli '#'\!'/bin/sh
echo original-first
'`

```
```

## `vpt write-file $VP_HOME/bin/zzz-rollback-cli '#'\!'/bin/sh
echo original-unattempted
'`

```
```

## `vpt chmod +x $VP_HOME/bin/aaa-rollback-cli`

```
```

## `vpt chmod +x $VP_HOME/bin/zzz-rollback-cli`

```
```

## `vp install -g ./env-binary-conflict-pkg-a`

A regular file prevents shim creation without authorizing rollback to delete existing files

**Exit code:** 1

```
VITE+ - The Unified Toolchain for the Web

info: Installing 1 global package with Node.js <version>
error: Failed to install env-binary-conflict-pkg-a: <home>/.vite-plus/bin/aaa-rollback-cli already exists and is not managed by Vite+
```

## `vpt stat-file $VP_HOME/bin/aaa-rollback-cli --assert file`

```
<home>/.vite-plus/bin/aaa-rollback-cli: file
```

## `aaa-rollback-cli`

```
original-first
```

## `vpt stat-file $VP_HOME/bin/zzz-rollback-cli --assert file`

```
<home>/.vite-plus/bin/zzz-rollback-cli: file
```

## `zzz-rollback-cli`

```
original-unattempted
```

## `vpt stat-file $VP_HOME/packages/env-binary-conflict-pkg-a.json --assert missing`

```
<home>/.vite-plus/packages/env-binary-conflict-pkg-a.json: missing
```

## `vpt stat-file $VP_HOME/bins/aaa-rollback-cli.json --assert missing`

```
<home>/.vite-plus/bins/aaa-rollback-cli.json: missing
```

## `vpt stat-file $VP_HOME/bins/zzz-rollback-cli.json --assert missing`

```
<home>/.vite-plus/bins/zzz-rollback-cli.json: missing
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# env_install_rollback_restores_npm_owner

## `npm install -g ./env-binary-conflict-pkg-a`

```

added 1 package in <duration>
Linked 'env-binary-conflict-cli' to <home>/.vite-plus/bin/env-binary-conflict-cli
```

## `vpt print-file $VP_HOME/bins/env-binary-conflict-cli.json`

```
{
"name": "env-binary-conflict-cli",
"package": "env-binary-conflict-pkg-a",
"version": "",
"nodeVersion": "<version>",
"source": "npm"
}
```

## `vpt json-edit env-binary-conflict-pkg-a/package.json bin.zzz-rollback-cli ./cli.js`

```
```

## `vpt mkdir $VP_HOME/bin/zzz-rollback-cli`

```
```

## `vp install -g ./env-binary-conflict-pkg-a`

A failure after replacing the npm link must restore the link and its ownership

**Exit code:** 1

```
VITE+ - The Unified Toolchain for the Web

info: Installing 1 global package with Node.js <version>
error: Failed to install env-binary-conflict-pkg-a: Cannot replace non-file <home>/.vite-plus/bin/zzz-rollback-cli
```

## `vpt stat-file $VP_HOME/bin/env-binary-conflict-cli --assert symlink`

```
<home>/.vite-plus/bin/env-binary-conflict-cli: symlink
```

## `env-binary-conflict-cli`

```
Hello from pkg-a!
```

## `vpt print-file $VP_HOME/bins/env-binary-conflict-cli.json`

```
{
"name": "env-binary-conflict-cli",
"package": "env-binary-conflict-pkg-a",
"version": "",
"nodeVersion": "<version>",
"source": "npm"
}
```

## `vpt stat-file $VP_HOME/bin/zzz-rollback-cli --assert dir`

```
<home>/.vite-plus/bin/zzz-rollback-cli: dir
```

## `vpt stat-file $VP_HOME/packages/env-binary-conflict-pkg-a.json --assert missing`

```
<home>/.vite-plus/packages/env-binary-conflict-pkg-a.json: missing
```

## `vpt stat-file $VP_HOME/bins/zzz-rollback-cli.json --assert missing`

```
<home>/.vite-plus/bins/zzz-rollback-cli.json: missing
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# env_install_without_backup_storage

## `vpt mkdir readonly-tmp`

```
```

## `vpt chmod 555 readonly-tmp`

```
```

## `vpt json-edit env-binary-conflict-pkg-a/package.json bin {}`

```
```

## `TMPDIR=${workspace}/readonly-tmp vp install -g ./env-binary-conflict-pkg-a`

A package without binaries needs no rollback storage

```
VITE+ - The Unified Toolchain for the Web

info: Installing 1 global package with Node.js <version>
Installed env-binary-conflict-pkg-a 1.0.0
```

## `vpt stat-file $VP_HOME/packages/env-binary-conflict-pkg-a.json --assert file`

```
<home>/.vite-plus/packages/env-binary-conflict-pkg-a.json: file
```

## `TMPDIR=${workspace}/readonly-tmp vp install -g ./env-binary-conflict-pkg-b`

New binaries need no backup of existing files

```
VITE+ - The Unified Toolchain for the Web

info: Installing 1 global package with Node.js <version>
Installed env-binary-conflict-pkg-b 2.0.0
Bins: env-binary-conflict-cli
```

## `env-binary-conflict-cli`

```
Hello from pkg-b!
```

## `vpt stat-file $VP_HOME/bins/env-binary-conflict-cli.json --assert file`

```
<home>/.vite-plus/bins/env-binary-conflict-cli.json: file
```
Loading
Loading