@aefree/pi-plastic 0.7.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ and this project follows semantic versioning for public package releases.
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## [0.7.2] - 2026-09-19
11
+
12
+ ### Fixed
13
+
14
+ - Stop pending-diff Xlink ownership discovery before querying the workspace root, allowing parent-repository base resolution while preserving linked-repository qualification and refusal on unresolved descendant ownership.
15
+ - Accept both `rep` and `repository` selector spellings when resolving workspace repository identity for pending diffs and shared selector consumers.
16
+
10
17
  ## [0.7.1] - 2026-09-17
11
18
 
12
19
  ### Changed
package/README.md CHANGED
@@ -119,13 +119,13 @@ pi install npm:@aefree/pi-plastic
119
119
  Install a pinned GitHub release over HTTPS:
120
120
 
121
121
  ```bash
122
- pi install git:github.com/aefreedman/pi-plastic@v0.7.1
122
+ pi install git:github.com/aefreedman/pi-plastic@v0.7.2
123
123
  ```
124
124
 
125
125
  Equivalent SSH install:
126
126
 
127
127
  ```bash
128
- pi install git:git@github.com/aefreedman/pi-plastic@v0.7.1
128
+ pi install git:git@github.com/aefreedman/pi-plastic@v0.7.2
129
129
  ```
130
130
 
131
131
  To intentionally track the moving default branch instead of a release tag:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aefree/pi-plastic",
3
- "version": "0.7.1",
3
+ "version": "0.7.2",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=22.19.0"
@@ -1876,7 +1876,7 @@ const parseRepositoryIdentity = (selector: string | undefined): RepositoryIdenti
1876
1876
 
1877
1877
  const parseRepositorySelector = (output: string): RepositoryIdentity | null =>
1878
1878
  {
1879
- const match = output.match(/^\s*repository\s+(?:"([^"]+)"|(\S+))\s*$/mi);
1879
+ const match = output.match(/^\s*(?:repository|rep)\s+(?:"([^"]+)"|(\S+))\s*$/mi);
1880
1880
  return parseRepositoryIdentity(match?.[1] ?? match?.[2]);
1881
1881
  };
1882
1882
 
@@ -1974,6 +1974,12 @@ const createPendingBaseIdentityResolver = (cwd: string, workdir?: string): Pendi
1974
1974
  toPathComparisonKeyFromAbsolutePath(rootIdentity),
1975
1975
  ))
1976
1976
  {
1977
+ // The workspace root belongs to its selector; cm rejects Xlink queries there.
1978
+ if (toPathComparisonKeyFromAbsolutePath(await toFilesystemIdentityPath(candidate))
1979
+ === toPathComparisonKeyFromAbsolutePath(rootIdentity))
1980
+ {
1981
+ break;
1982
+ }
1977
1983
  // A missing ancestor can be a removed Xlink mount. Status does not
1978
1984
  // retain ownership, so parent-repository fallback would be unsafe.
1979
1985
  if ((item.kind === "deleted" || item.kind === "moved") && !(await fs.stat(candidate).catch(() => null)))
@@ -1986,11 +1992,6 @@ const createPendingBaseIdentityResolver = (cwd: string, workdir?: string): Pendi
1986
1992
  item.baseRepository = `${repository.repository}@${repository.server}`;
1987
1993
  return `revid:${item.revisionId}@rep:${repository.repository}@repserver:${repository.server}`;
1988
1994
  }
1989
- if (toPathComparisonKeyFromAbsolutePath(await toFilesystemIdentityPath(candidate))
1990
- === toPathComparisonKeyFromAbsolutePath(rootIdentity))
1991
- {
1992
- break;
1993
- }
1994
1995
  const parent = dirname(candidate);
1995
1996
  if (parent === candidate)
1996
1997
  {
@@ -84,7 +84,7 @@ export function parsePlasticSelector(content: string): ParseOutcome<PlasticSelec
84
84
 
85
85
  for (const line of content.split(/\r?\n/)) {
86
86
  if (/^\s*(?:#|$)/.test(line)) continue;
87
- if (/^\s*repository(?:\s|$)/i.test(line)) repository = parseSelectorValue(line, "repository");
87
+ if (/^\s*(?:repository|rep)(?:\s|$)/i.test(line)) repository = parseSelectorValue(line, "(?:repository|rep)");
88
88
  if (/^\s*smartbranch(?:\s|$)/i.test(line)) {
89
89
  sawBranchKey = true;
90
90
  smartBranch = parseSelectorValue(line, "smartbranch");