pacman-debian 7.3.34 → 7.4.0

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.
Files changed (78) hide show
  1. package/README.md +12 -0
  2. package/README_zh-CN.md +11 -0
  3. package/dist/cli/paclink.js +95 -0
  4. package/dist/cli/paclink.js.map +1 -1
  5. package/dist/cli/pacman.d.ts.map +1 -1
  6. package/dist/cli/pacman.js +54 -7
  7. package/dist/cli/pacman.js.map +1 -1
  8. package/dist/cli/pactree.d.ts +3 -0
  9. package/dist/cli/pactree.d.ts.map +1 -0
  10. package/dist/cli/pactree.js +216 -0
  11. package/dist/cli/pactree.js.map +1 -0
  12. package/dist/core/deps.d.ts +5 -0
  13. package/dist/core/deps.d.ts.map +1 -1
  14. package/dist/core/deps.js +85 -19
  15. package/dist/core/deps.js.map +1 -1
  16. package/dist/core/logger.d.ts +7 -0
  17. package/dist/core/logger.d.ts.map +1 -0
  18. package/dist/core/logger.js +93 -0
  19. package/dist/core/logger.js.map +1 -0
  20. package/dist/core/options.d.ts +1 -0
  21. package/dist/core/options.d.ts.map +1 -1
  22. package/dist/core/paclinks.d.ts +9 -0
  23. package/dist/core/paclinks.d.ts.map +1 -0
  24. package/dist/core/paclinks.js +69 -0
  25. package/dist/core/paclinks.js.map +1 -0
  26. package/dist/core/tar.d.ts +2 -1
  27. package/dist/core/tar.d.ts.map +1 -1
  28. package/dist/core/tar.js +33 -4
  29. package/dist/core/tar.js.map +1 -1
  30. package/dist/core/types.d.ts +12 -0
  31. package/dist/core/types.d.ts.map +1 -1
  32. package/dist/db/dpkg-compat.js +6 -6
  33. package/dist/db/dpkg-compat.js.map +1 -1
  34. package/dist/debug-upgrade.d.ts +2 -0
  35. package/dist/debug-upgrade.d.ts.map +1 -0
  36. package/dist/debug-upgrade.js +140 -0
  37. package/dist/debug-upgrade.js.map +1 -0
  38. package/dist/i18n/en.json +2 -0
  39. package/dist/i18n/paclink/en.d.ts.map +1 -1
  40. package/dist/i18n/paclink/en.js +7 -0
  41. package/dist/i18n/paclink/en.js.map +1 -1
  42. package/dist/i18n/paclink/zh-CN.d.ts.map +1 -1
  43. package/dist/i18n/paclink/zh-CN.js +7 -0
  44. package/dist/i18n/paclink/zh-CN.js.map +1 -1
  45. package/dist/i18n/zh-CN.json +2 -0
  46. package/dist/makepkg/build.d.ts.map +1 -1
  47. package/dist/makepkg/build.js +3 -5
  48. package/dist/makepkg/build.js.map +1 -1
  49. package/dist/makepkg/pkgbuild.d.ts +1 -1
  50. package/dist/makepkg/pkgbuild.d.ts.map +1 -1
  51. package/dist/makepkg/pkgbuild.js +111 -59
  52. package/dist/makepkg/pkgbuild.js.map +1 -1
  53. package/dist/ops/install.d.ts +2 -1
  54. package/dist/ops/install.d.ts.map +1 -1
  55. package/dist/ops/install.js +88 -35
  56. package/dist/ops/install.js.map +1 -1
  57. package/dist/ops/query.d.ts.map +1 -1
  58. package/dist/ops/query.js +59 -33
  59. package/dist/ops/query.js.map +1 -1
  60. package/dist/ops/upgrade.d.ts.map +1 -1
  61. package/dist/ops/upgrade.js +69 -12
  62. package/dist/ops/upgrade.js.map +1 -1
  63. package/dist/repo/config.d.ts.map +1 -1
  64. package/dist/repo/config.js +35 -4
  65. package/dist/repo/config.js.map +1 -1
  66. package/dist/repo/repository.d.ts.map +1 -1
  67. package/dist/repo/repository.js +167 -43
  68. package/dist/repo/repository.js.map +1 -1
  69. package/dist/scripts/setup.js +2 -1
  70. package/dist/scripts/setup.js.map +1 -1
  71. package/docs/en/architecture.md +109 -45
  72. package/docs/en/pactree.md +42 -0
  73. package/docs/en/yay-aur.md +10 -6
  74. package/docs/zh-CN/pactree.md +41 -0
  75. package/lib/pac4deb/src/libalpm.c +40 -33
  76. package/lib/pac4deb/src/stubs_manual.c +11 -1
  77. package/package.json +3 -2
  78. package/resources/pacman.conf.template +16 -2
@@ -39,76 +39,128 @@ exports.printSrcinfo = printSrcinfo;
39
39
  const node_child_process_1 = require("node:child_process");
40
40
  const fs = __importStar(require("node:fs"));
41
41
  const path = __importStar(require("node:path"));
42
- function bashGet(v, p) {
43
- try {
44
- return (0, node_child_process_1.execSync)(`bash -c 'source "${p}" 2>/dev/null; printf "%s" "${'$'}{${v}}" 2>/dev/null'`, { encoding: 'utf8', timeout: 10000 }).trim();
45
- }
46
- catch {
47
- return '';
48
- }
49
- }
50
- function bashGetArray(v, p) {
51
- try {
52
- const out = (0, node_child_process_1.execSync)(`bash -c 'source "${p}" 2>/dev/null; for i in "${'$'}{${v}[@]}"; do echo "$i"; done' 2>/dev/null`, { encoding: 'utf8', timeout: 10000 }).trim();
53
- return out ? out.split('\n').filter(Boolean) : [];
54
- }
55
- catch {
56
- return [];
57
- }
58
- }
59
- function bashGetFn(f, p) {
60
- try {
61
- return (0, node_child_process_1.execSync)(`bash -c 'source "${p}" 2>/dev/null; declare -f ${f} 2>/dev/null'`, { encoding: 'utf8', timeout: 10000 }).trim();
62
- }
63
- catch {
64
- return '';
42
+ /**
43
+ * Source the PKGBUILD ONCE in a single bash invocation and extract all
44
+ * variables + functions. Previously each variable/function required a
45
+ * separate execSync (≈35 forks), which was very slow on low-end ARM boards.
46
+ */
47
+ function bashParsePkgbuild(absPath) {
48
+ const script = [
49
+ `source "${absPath}" 2>/dev/null`,
50
+ 'echo "S pkgbase=${pkgbase-unset}"',
51
+ 'echo "S pkgname=${pkgname-unset}"',
52
+ 'echo "S pkgver=${pkgver-unset}"',
53
+ 'echo "S pkgrel=${pkgrel-unset}"',
54
+ 'echo "S epoch=${epoch-unset}"',
55
+ 'echo "S pkgdesc=${pkgdesc-unset}"',
56
+ 'echo "S url=${url-unset}"',
57
+ 'echo "S install=${install-unset}"',
58
+ 'for i in "${arch[@]+"${arch[@]}"}"; do printf "A arch=%s\\n" "$i"; done',
59
+ 'for i in "${license[@]+"${license[@]}"}"; do printf "A license=%s\\n" "$i"; done',
60
+ 'for i in "${groups[@]+"${groups[@]}"}"; do printf "A groups=%s\\n" "$i"; done',
61
+ 'for i in "${depends[@]+"${depends[@]}"}"; do printf "A depends=%s\\n" "$i"; done',
62
+ 'for i in "${makedepends[@]+"${makedepends[@]}"}"; do printf "A makedepends=%s\\n" "$i"; done',
63
+ 'for i in "${optdepends[@]+"${optdepends[@]}"}"; do printf "A optdepends=%s\\n" "$i"; done',
64
+ 'for i in "${checkdepends[@]+"${checkdepends[@]}"}"; do printf "A checkdepends=%s\\n" "$i"; done',
65
+ 'for i in "${provides[@]+"${provides[@]}"}"; do printf "A provides=%s\\n" "$i"; done',
66
+ 'for i in "${conflicts[@]+"${conflicts[@]}"}"; do printf "A conflicts=%s\\n" "$i"; done',
67
+ 'for i in "${replaces[@]+"${replaces[@]}"}"; do printf "A replaces=%s\\n" "$i"; done',
68
+ 'for i in "${source[@]+"${source[@]}"}"; do printf "A source=%s\\n" "$i"; done',
69
+ 'for i in "${noextract[@]+"${noextract[@]}"}"; do printf "A noextract=%s\\n" "$i"; done',
70
+ 'for i in "${sha256sums[@]+"${sha256sums[@]}"}"; do printf "A sha256sums=%s\\n" "$i"; done',
71
+ 'for i in "${md5sums[@]+"${md5sums[@]}"}"; do printf "A md5sums=%s\\n" "$i"; done',
72
+ 'for i in "${validpgpkeys[@]+"${validpgpkeys[@]}"}"; do printf "A validpgpkeys=%s\\n" "$i"; done',
73
+ 'for i in "${options[@]+"${options[@]}"}"; do printf "A options=%s\\n" "$i"; done',
74
+ 'for i in "${backup[@]+"${backup[@]}"}"; do printf "A backup=%s\\n" "$i"; done',
75
+ 'for f in build package prepare check; do',
76
+ ' echo "F $f"',
77
+ ' declare -f "$f" 2>/dev/null || true',
78
+ ' echo "E $f"',
79
+ 'done',
80
+ ].join('\n');
81
+ const out = (0, node_child_process_1.execSync)('bash -s', { input: script, encoding: 'utf8', timeout: 10000 }).trim();
82
+ const lines = out.split('\n');
83
+ const scalars = {};
84
+ const arrays = {};
85
+ const funcs = {};
86
+ let currentFunc = null;
87
+ let funcBuffer = [];
88
+ for (const line of lines) {
89
+ if (line.startsWith('S ')) {
90
+ const val = line.substring(2);
91
+ const eqIdx = val.indexOf('=');
92
+ if (eqIdx > 0) {
93
+ const value = val.substring(eqIdx + 1);
94
+ if (value !== 'unset')
95
+ scalars[val.substring(0, eqIdx)] = value;
96
+ }
97
+ }
98
+ else if (line.startsWith('A ')) {
99
+ const val = line.substring(2);
100
+ const eqIdx = val.indexOf('=');
101
+ if (eqIdx > 0) {
102
+ const key = val.substring(0, eqIdx);
103
+ const value = val.substring(eqIdx + 1);
104
+ (arrays[key] || (arrays[key] = [])).push(value);
105
+ }
106
+ }
107
+ else if (line.startsWith('F ')) {
108
+ currentFunc = line.substring(2);
109
+ funcBuffer = [];
110
+ }
111
+ else if (line.startsWith('E ') && currentFunc !== null && line.substring(2) === currentFunc) {
112
+ if (funcBuffer.length > 0)
113
+ funcs[currentFunc] = funcBuffer.join('\n');
114
+ currentFunc = null;
115
+ funcBuffer = [];
116
+ }
117
+ else if (currentFunc !== null) {
118
+ funcBuffer.push(line);
119
+ }
65
120
  }
121
+ return { scalars, arrays, funcs };
66
122
  }
67
- function parsePkgbuild(pkgbuildPath, ignoreArch = false) {
123
+ function parsePkgbuild(pkgbuildPath, _ignoreArch = false) {
68
124
  if (!fs.existsSync(pkgbuildPath))
69
125
  throw new Error(`PKGBUILD not found: ${pkgbuildPath}`);
70
126
  const absPath = path.resolve(pkgbuildPath);
71
- const arch = bashGetArray('arch', absPath);
72
- const systemArch = process.arch === 'arm64' ? 'aarch64' : process.arch;
73
- const validArch = ignoreArch || arch.length === 0 || arch.includes('any') || arch.includes(systemArch);
127
+ const { scalars, arrays, funcs } = bashParsePkgbuild(absPath);
74
128
  const info = {
75
- pkgbase: bashGet('pkgbase', absPath) || undefined,
76
- pkgname: bashGet('pkgname', absPath),
77
- pkgver: bashGet('pkgver', absPath),
78
- pkgrel: bashGet('pkgrel', absPath),
79
- epoch: bashGet('epoch', absPath) || undefined,
80
- pkgdesc: bashGet('pkgdesc', absPath) || '',
81
- arch,
82
- url: bashGet('url', absPath) || undefined,
83
- license: bashGetArray('license', absPath),
84
- groups: bashGetArray('groups', absPath),
85
- depends: bashGetArray('depends', absPath),
86
- makedepends: bashGetArray('makedepends', absPath),
87
- optdepends: bashGetArray('optdepends', absPath),
88
- checkdepends: bashGetArray('checkdepends', absPath),
89
- provides: bashGetArray('provides', absPath),
90
- conflicts: bashGetArray('conflicts', absPath),
91
- replaces: bashGetArray('replaces', absPath),
92
- source: bashGetArray('source', absPath),
93
- noextract: bashGetArray('noextract', absPath),
94
- sha256sums: bashGetArray('sha256sums', absPath),
95
- md5sums: bashGetArray('md5sums', absPath),
96
- validpgpkeys: bashGetArray('validpgpkeys', absPath),
97
- install: bashGet('install', absPath) || undefined,
98
- options: bashGetArray('options', absPath),
99
- backup: bashGetArray('backup', absPath),
100
- buildFn: bashGetFn('build', absPath),
101
- packageFn: bashGetFn('package', absPath),
102
- prepareFn: bashGetFn('prepare', absPath),
103
- checkFn: bashGetFn('check', absPath),
104
- validArch,
129
+ pkgbase: scalars['pkgbase'] || undefined,
130
+ pkgname: scalars['pkgname'] || '',
131
+ pkgver: scalars['pkgver'] || '',
132
+ pkgrel: scalars['pkgrel'] || '',
133
+ epoch: scalars['epoch'] || undefined,
134
+ pkgdesc: scalars['pkgdesc'] || '',
135
+ arch: arrays['arch'] || [],
136
+ url: scalars['url'] || undefined,
137
+ license: arrays['license'] || [],
138
+ groups: arrays['groups'] || [],
139
+ depends: arrays['depends'] || [],
140
+ makedepends: arrays['makedepends'] || [],
141
+ optdepends: arrays['optdepends'] || [],
142
+ checkdepends: arrays['checkdepends'] || [],
143
+ provides: arrays['provides'] || [],
144
+ conflicts: arrays['conflicts'] || [],
145
+ replaces: arrays['replaces'] || [],
146
+ source: arrays['source'] || [],
147
+ noextract: arrays['noextract'] || [],
148
+ sha256sums: arrays['sha256sums'] || [],
149
+ md5sums: arrays['md5sums'] || [],
150
+ validpgpkeys: arrays['validpgpkeys'] || [],
151
+ install: scalars['install'] || undefined,
152
+ options: arrays['options'] || [],
153
+ backup: arrays['backup'] || [],
154
+ buildFn: funcs['build'] || '',
155
+ packageFn: funcs['package'] || '',
156
+ prepareFn: funcs['prepare'] || '',
157
+ checkFn: funcs['check'] || '',
158
+ validArch: true,
105
159
  };
106
160
  if (!info.pkgname)
107
161
  throw new Error('PKGBUILD missing pkgname');
108
162
  if (!info.pkgver)
109
163
  throw new Error('PKGBUILD missing pkgver');
110
- if (!info.validArch)
111
- throw new Error(`PKGBUILD does not support architecture: ${systemArch} (${arch.join(', ')})`);
112
164
  return info;
113
165
  }
114
166
  function pkgFilename(info, archOverride) {
@@ -1 +1 @@
1
- {"version":3,"file":"pkgbuild.js","sourceRoot":"","sources":["../../src/makepkg/pkgbuild.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pkgbuild.js","sourceRoot":"","sources":["../../src/makepkg/pkgbuild.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
+ import type { ProgressCallback } from '../core/tar';
1
2
  import type { InstallOptions } from '../core/options';
2
- export declare function installPkgFile(filePath: string, reason: 'explicit' | 'dependency', opts?: InstallOptions): Promise<boolean>;
3
+ export declare function installPkgFile(filePath: string, reason: 'explicit' | 'dependency', opts?: InstallOptions, onProgress?: ProgressCallback): Promise<boolean>;
3
4
  export declare function installPkg(target: string, opts?: InstallOptions): Promise<boolean>;
4
5
  export declare function installPackages(targets: string[], opts?: InstallOptions): Promise<number>;
5
6
  //# sourceMappingURL=install.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/ops/install.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA4ItD,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,YAAY,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAMrI;AA8GD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgD5F;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmOnG"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/ops/install.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAiBpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAwJtD,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,YAAY,EAAE,IAAI,GAAE,cAAmB,EAAE,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAMpK;AA8GD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmD5F;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqQnG"}
@@ -55,13 +55,14 @@ const format_1 = require("../ui/format");
55
55
  const progress_1 = require("../ui/progress");
56
56
  const prompt_1 = require("../ui/prompt");
57
57
  const i18n_1 = require("../i18n");
58
- async function installDeb(filePath, reason, opts = {}) {
58
+ async function installDeb(filePath, reason, opts = {}, onProgress) {
59
59
  (0, database_1.initDb)();
60
60
  const pkg = (0, deb_1.parseDeb)(filePath);
61
61
  const db = (0, database_1.loadDatabase)();
62
62
  removeLinkIfPresent(pkg.control.package);
63
63
  const { control } = pkg;
64
64
  const existing = (0, database_1.getPackage)(db, control.package);
65
+ const _cfg = (0, config_1.loadConfig)();
65
66
  if (opts.needed && existing && existing.version === control.version) {
66
67
  return false;
67
68
  }
@@ -82,7 +83,7 @@ async function installDeb(filePath, reason, opts = {}) {
82
83
  (0, database_1.saveScript)(control.package, 'preinst', preinst);
83
84
  (0, database_1.runScript)(control.package, 'preinst', ['install']);
84
85
  }
85
- const files = (0, tar_1.extractTar)(pkg.dataTar, '/');
86
+ const files = (0, tar_1.extractTar)(pkg.dataTar, '/', onProgress, _cfg.noExtract, _cfg.noUpgrade);
86
87
  if (!opts.noscriptlet) {
87
88
  const postinst = (0, deb_1.readScript)(pkg, 'postinst');
88
89
  if (postinst)
@@ -128,7 +129,7 @@ function removeLinkIfPresent(pkgName) {
128
129
  (0, localdb_1.removePackage)(pkgName, existing.version);
129
130
  }
130
131
  }
131
- async function installArch(filePath, reason, opts = {}) {
132
+ async function installArch(filePath, reason, opts = {}, onProgress) {
132
133
  (0, database_1.initDb)();
133
134
  const data = fs.readFileSync(filePath);
134
135
  const { info, install, files: pkgFiles, dataBlocks } = (0, pkgfile_1.parsePkgTarZst)(data);
@@ -161,15 +162,28 @@ async function installArch(filePath, reason, opts = {}) {
161
162
  }
162
163
  }
163
164
  const files = [];
164
- for (const entry of dataBlocks) {
165
+ const total = dataBlocks.length;
166
+ const _archCfg = (0, config_1.loadConfig)();
167
+ const matchArch = (p, name) => p === name || p === '/' + name || (p.endsWith('/*') && name.startsWith(p.slice(0, -1)));
168
+ for (let i = 0; i < total; i++) {
169
+ const entry = dataBlocks[i];
165
170
  const targetPath = path.resolve('/', entry.name);
166
171
  if (!targetPath.startsWith('/'))
167
172
  continue;
168
173
  files.push('/' + entry.name);
174
+ if (_archCfg.noExtract.some(p => matchArch(p, entry.name)))
175
+ continue;
169
176
  if (entry.data) {
170
177
  fs.mkdirSync(path.dirname(targetPath), { recursive: true });
171
- fs.writeFileSync(targetPath, entry.data, { mode: 0o755 });
178
+ if (_archCfg.noUpgrade.some(p => matchArch(p, entry.name)) && fs.existsSync(targetPath)) {
179
+ const bak = targetPath + '.pacnew';
180
+ fs.writeFileSync(bak, entry.data, { mode: 0o755 });
181
+ }
182
+ else {
183
+ fs.writeFileSync(targetPath, entry.data, { mode: 0o755 });
184
+ }
172
185
  }
186
+ onProgress?.(i + 1, total, entry.name);
173
187
  }
174
188
  if (!opts.noscriptlet && install?.post_install) {
175
189
  const tmpScript = `/var/lib/pacman-debian/info/${info.name}/.INSTALL`;
@@ -212,15 +226,15 @@ async function installArch(filePath, reason, opts = {}) {
212
226
  (0, database_1.completeTransaction)(tx.id);
213
227
  return true;
214
228
  }
215
- async function installPkgFile(filePath, reason, opts = {}) {
229
+ async function installPkgFile(filePath, reason, opts = {}, onProgress) {
216
230
  if (opts.print) {
217
231
  console.log((0, i18n_1.t)('would_install', path.basename(filePath)));
218
232
  return true;
219
233
  }
220
234
  if (filePath.endsWith('.pkg.tar.zst') || filePath.endsWith('.pkg.tar.xz') || filePath.endsWith('.pkg.tar.gz')) {
221
- return installArch(filePath, reason, opts);
235
+ return installArch(filePath, reason, opts, onProgress);
222
236
  }
223
- return installDeb(filePath, reason, opts);
237
+ return installDeb(filePath, reason, opts, onProgress);
224
238
  }
225
239
  function parseFtpUrl(url) {
226
240
  const rest = url.slice(6);
@@ -383,8 +397,11 @@ async function installPkg(target, opts = {}) {
383
397
  return false;
384
398
  }
385
399
  const cols = process.stdout.columns || 80;
386
- const barLen = Math.max(Math.floor((cols - 30) * 0.35), 8);
387
- const barDone = '#'.repeat(barLen);
400
+ const barLen = Math.max(cols - 50, 8);
401
+ const drawBar = (pct) => {
402
+ const filled = Math.round((pct / 100) * barLen);
403
+ return `[${'#'.repeat(filled)}${'-'.repeat(barLen - filled)}] ${String(pct).padStart(3)}%`;
404
+ };
388
405
  console.log((0, i18n_1.t)('packages_single', fname) + '\n');
389
406
  if (!await (0, prompt_1.confirm)((0, i18n_1.t)('confirm_proceed')))
390
407
  return false;
@@ -392,9 +409,9 @@ async function installPkg(target, opts = {}) {
392
409
  console.log((0, i18n_1.t)('would_install', fname));
393
410
  return true;
394
411
  }
395
- process.stdout.write((0, i18n_1.t)('progress_loading_data', '1', '1', barDone) + '\n');
396
- process.stdout.write((0, i18n_1.t)('progress_installing_single', '1', '1', fname, barDone) + '\n');
412
+ console.log(`(1/1) ${(0, i18n_1.t)('progress_loading_files_msg')} ${drawBar(0)}`);
397
413
  const result = await installPkgFile(localPath, 'explicit', opts);
414
+ console.log(`(1/1) installing ${fname} ${drawBar(100)}`);
398
415
  if (isUrl)
399
416
  try {
400
417
  fs.unlinkSync(localPath);
@@ -460,7 +477,25 @@ async function installPackages(targets, opts = {}) {
460
477
  }
461
478
  const totalSize = allPkgs.reduce((s, p) => s + (p.size || 0), 0);
462
479
  const totalInst = allPkgs.reduce((s, p) => s + ((p.installedSize || 0) * 1024), 0);
463
- console.log((0, i18n_1.t)('packages_multi', String(allPkgs.length), allPkgs.map(p => p.package).join(' ')) + '\n');
480
+ const _cfg = (0, config_1.loadConfig)();
481
+ if (_cfg.verbosePkgLists) {
482
+ const cols = process.stdout.columns || 80;
483
+ const nameW = Math.max(20, Math.floor(cols * 0.3));
484
+ const verW = Math.max(16, Math.floor(cols * 0.2));
485
+ const repoW = Math.max(10, Math.floor(cols * 0.15));
486
+ console.log((0, i18n_1.t)('packages_multi', String(allPkgs.length), ''));
487
+ console.log(` ${'Name'.padEnd(nameW)} ${'Version'.padEnd(verW)} ${'Repo'.padEnd(repoW)} Size`);
488
+ console.log(` ${'─'.repeat(nameW)} ${'─'.repeat(verW)} ${'─'.repeat(repoW)} ${'─'.repeat(8)}`);
489
+ for (const p of allPkgs) {
490
+ const name = p.package.length > nameW ? p.package.slice(0, nameW - 3) + '...' : p.package;
491
+ const ver = (p.version || '').length > verW ? (p.version || '').slice(0, verW - 3) + '...' : (p.version || '');
492
+ console.log(` ${name.padEnd(nameW)} ${ver.padEnd(verW)} ${p.repo.padEnd(repoW)} ${(0, format_1.formatBytes)(p.size || 0).padStart(8)}`);
493
+ }
494
+ }
495
+ else {
496
+ console.log((0, i18n_1.t)('packages_multi', String(allPkgs.length), allPkgs.map(p => p.package).join(' ')));
497
+ }
498
+ console.log('');
464
499
  console.log((0, i18n_1.t)('total_download_size', (0, format_1.formatBytes)(totalSize).padStart(9)));
465
500
  console.log((0, i18n_1.t)('total_installed_size', (0, format_1.formatBytes)(totalInst).padStart(9)));
466
501
  console.log('');
@@ -471,20 +506,29 @@ async function installPackages(targets, opts = {}) {
471
506
  console.log((0, i18n_1.t)('would_install', `${p.package}-${p.version}`));
472
507
  return allPkgs.length;
473
508
  }
509
+ // ---- Transaction start ----
510
+ console.log((0, i18n_1.t)('processing_changes'));
474
511
  // ---- Download phase ----
475
512
  const total = allPkgs.length;
476
513
  const cols = process.stdout.columns || 80;
477
514
  const parallelN = (0, config_1.loadConfig)().parallelDownloads || 1;
478
- console.log((0, i18n_1.t)('downloading_packages'));
515
+ console.log((0, i18n_1.t)('retrieving_packages'));
479
516
  const downloaded = [];
480
517
  const startTime = Date.now();
481
518
  /** Render a right-aligned progress bar line. leftText precedes `[`, rightText follows `]`. */
482
519
  const barLine = (leftText, rightText, pct) => {
483
520
  const barLen = Math.max(cols - (0, progress_1.terminalWidth)(leftText) - (0, progress_1.terminalWidth)(rightText), 5);
484
- return `${leftText}${(0, progress_1.drawProgressBar)(pct, barLen)}${rightText}`;
521
+ const line = `${leftText}${(0, progress_1.drawProgressBar)(pct, barLen)}${rightText}`;
522
+ if ((0, progress_1.terminalWidth)(line) < cols)
523
+ return line + ' '.repeat(cols - (0, progress_1.terminalWidth)(line));
524
+ return line;
485
525
  };
486
526
  const nameWidth = Math.max(25, Math.floor(cols * 0.35));
527
+ let dlIdx = 0;
487
528
  const downloadOne = async (p) => {
529
+ const idx = ++dlIdx;
530
+ const digits = String(total).length;
531
+ const prefix = `(${String(idx).padStart(digits)}/${String(total).padEnd(digits)})`;
488
532
  const pkgLabel = `${p.package}-${p.version}-${p.architecture || 'any'}`;
489
533
  const displayName = pkgLabel.length > nameWidth ? pkgLabel.slice(0, nameWidth - 3) + '...' : pkgLabel;
490
534
  let finalRate = 0, prevTime = Date.now(), prevBytes = 0, smoothRate = 0;
@@ -501,12 +545,12 @@ async function installPackages(targets, opts = {}) {
501
545
  const eta = smoothRate > 0 && tot > 0 ? (tot - rec) / smoothRate : 0;
502
546
  const etaS = (0, progress_1.formatETA)(eta);
503
547
  const pct = tot > 0 ? Math.round(rec / tot * 100) : 0;
504
- const line = barLine(`\r ${displayName.padEnd(nameWidth)} ${dl.val.padStart(6)} ${dl.unit.padEnd(3)} ${rateStr} ${etaS} [`, `] ${String(pct).padStart(3)}%`, pct);
505
- process.stdout.write(line);
548
+ const line = barLine(` ${prefix} ${displayName.padEnd(nameWidth)} ${dl.val.padStart(6)} ${dl.unit.padEnd(3)} ${rateStr} ${etaS} [`, `] ${String(pct).padStart(3)}%`, pct);
549
+ process.stdout.write(`\r${line}`);
506
550
  });
507
551
  const finalSize = (0, progress_1.humanSize)(p.size || 0, 1);
508
- const compLine = barLine(`\r ${displayName.padEnd(nameWidth)} ${finalSize.val.padStart(6)} ${finalSize.unit.padEnd(3)} ${(0, progress_1.formatRate)(finalRate)} ${'00:00'} [`, `] 100%`, 100);
509
- process.stdout.write(compLine + '\n');
552
+ const compLine = barLine(` ${prefix} ${displayName.padEnd(nameWidth)} ${finalSize.val.padStart(6)} ${finalSize.unit.padEnd(3)} ${(0, progress_1.formatRate)(finalRate)} ${'00:00'} [`, `] 100%`, 100);
553
+ process.stdout.write(`\r${compLine}\n`);
510
554
  return { pkg: p, path: localPath, rate: finalRate };
511
555
  };
512
556
  // Parallel download
@@ -530,7 +574,10 @@ async function installPackages(targets, opts = {}) {
530
574
  const totalLine = barLine(` ${totalLabel.padEnd(nameWidth)} ${totalSizeStr.val.padStart(6)} ${totalSizeStr.unit.padEnd(3)} ${totalRateStr} ${'00:00'} [`, `] 100%`, 100);
531
575
  process.stdout.write(totalLine + '\n');
532
576
  // ---- Pre-install checks (after download, matching real pacman order) ----
533
- const prefixStr = `(${String(total)}/${String(total)}) `;
577
+ const totalChk = downloaded.length;
578
+ const digitsChk = String(totalChk).length;
579
+ let chkIdx = 0;
580
+ const prefixChk = () => `(${String(++chkIdx).padStart(digitsChk)}/${String(totalChk).padEnd(digitsChk)})`;
534
581
  const checkMessages = [
535
582
  (0, i18n_1.t)('progress_checking_keys_msg'),
536
583
  (0, i18n_1.t)('progress_checking_integrity_msg'),
@@ -538,10 +585,11 @@ async function installPackages(targets, opts = {}) {
538
585
  (0, i18n_1.t)('progress_checking_conflicts_msg'),
539
586
  (0, i18n_1.t)('progress_checking_space_msg'),
540
587
  ];
541
- const maxMsgTw = Math.max(...checkMessages.map(m => (0, progress_1.terminalWidth)(m)));
588
+ const maxChkMsgTw = Math.max(...checkMessages.map(m => (0, progress_1.terminalWidth)(m)));
542
589
  const fmtCheck = (msg) => {
543
- const pad = maxMsgTw - (0, progress_1.terminalWidth)(msg);
544
- const line = barLine(`${prefixStr}${msg}${' '.repeat(pad)} [`, `] 100%`, 100);
590
+ const p = prefixChk();
591
+ const pad = maxChkMsgTw - (0, progress_1.terminalWidth)(msg);
592
+ const line = barLine(` ${p} ${msg}${' '.repeat(pad)} [`, `] 100%`, 100);
545
593
  process.stdout.write(line + '\n');
546
594
  };
547
595
  // 1. Keys check
@@ -561,8 +609,9 @@ async function installPackages(targets, opts = {}) {
561
609
  // 3. Load files — validate package archive format
562
610
  for (const { pkg: p, path: fp } of downloaded) {
563
611
  try {
564
- if (fp.endsWith('.deb'))
565
- (0, node_child_process_1.execSync)(`dpkg-deb --info "${fp}" 2>/dev/null`, { encoding: 'utf8', timeout: 5000 });
612
+ if (fp.endsWith('.deb')) {
613
+ (0, deb_1.parseDeb)(fp);
614
+ }
566
615
  else
567
616
  (0, node_child_process_1.execSync)(`tar -t --zstd -f "${fp}" 2>/dev/null | head -1`, { encoding: 'utf8', timeout: 5000 });
568
617
  }
@@ -575,19 +624,23 @@ async function installPackages(targets, opts = {}) {
575
624
  // 4. File conflict check
576
625
  fmtCheck((0, i18n_1.t)('progress_checking_conflicts_msg'));
577
626
  // 5. Available space check
578
- try {
579
- const df = (0, node_child_process_1.execSync)('df -k /', { encoding: 'utf8', timeout: 5000 });
580
- const match = df.trim().split('\n').pop()?.match(/\s(\d+)\s+(\d+)\s+(\d+)/);
581
- if (match) {
582
- const availKb = parseInt(match[3], 10);
583
- const needKb = Math.ceil((allPkgs.reduce((s, p) => s + ((p.installedSize || 0) * 1024), 0)) / 1024);
584
- if (availKb < needKb) {
585
- console.error(`\n ERROR: not enough disk space (need ${needKb} KiB, have ${availKb} KiB)`);
586
- return 0;
627
+ const cfg = (0, config_1.loadConfig)();
628
+ if (cfg.checkSpace) {
629
+ try {
630
+ const dfPath = cfg.rootDir === '/' ? '/' : cfg.rootDir;
631
+ const df = (0, node_child_process_1.execSync)(`df -k "${dfPath}"`, { encoding: 'utf8', timeout: 5000 });
632
+ const match = df.trim().split('\n').pop()?.match(/\s(\d+)\s+(\d+)\s+(\d+)/);
633
+ if (match) {
634
+ const availKb = parseInt(match[3], 10);
635
+ const needKb = allPkgs.reduce((s, p) => s + ((p.installedSize || 0)), 0);
636
+ if (availKb < needKb) {
637
+ console.error(`\n error: not enough disk space (need ${(needKb / 1024).toFixed(1)} MiB, have ${(availKb / 1024).toFixed(1)} MiB)`);
638
+ return 0;
639
+ }
587
640
  }
588
641
  }
642
+ catch { }
589
643
  }
590
- catch { }
591
644
  fmtCheck((0, i18n_1.t)('progress_checking_space_msg'));
592
645
  // Install phase (serial for safety)
593
646
  for (const { pkg: p, path: localPath } of downloaded) {