--- Begin Message ---
Package: xe
Severity: important
X-Debbugs-CC: [email protected], [email protected]
Hi
I have prepared packaging of v1.0 here:
https://salsa.debian.org/jas/xe/-/commits/debian/latest?ref_type=HEADS
The Salsa CI pipeline passes:
https://salsa.debian.org/jas/xe/-/pipelines
Attaching a debdiff compared to 0.11-5 below.
Nicoo, do you want to upload 1.0 yourself? I am happy to co-maintain
and or just provide this as a one-time contribution if you prefer to
stay single maintainer of this package. Given that you marked yourself
as LowNMU I suppose you are okay with uploads given advance notice too
(as in this e-mail). I don't care strongly which route to proceed with.
We could also just move it to some team that maintains it, although I'm
not sure which team is most appropriate.
As per
https://www.debian.org/doc/manuals/developers-reference/pkgs.en.html#package-salvaging
https://wiki.debian.org/PackageSalvaging
this is also an attempt at salvaging this package -- so please help me
follow the process correctly if I mis to do something right here -- for
the following reasons:
- There is no visible activity regarding the package for six months
MIA team, do you have anything to add?
/Simon
diff -Nru xe-0.11/debian/changelog xe-1.0/debian/changelog
--- xe-0.11/debian/changelog 2020-11-02 11:43:50.000000000 +0100
+++ xe-1.0/debian/changelog 2025-08-31 20:39:43.000000000 +0200
@@ -1,3 +1,25 @@
+xe (1.0-1) unstable; urgency=medium
+
+ * LowNMU/PackageSalvage upload.
+
+ [ Simon Josefsson ]
+ * Add d/salsa-ci.yml.
+ * Use gbp debian-branch debian/latest.
+ * New upstream version 1.0
+
+ [ Debian Janitor ]
+ * Bump debhelper from old 12 to 13.
+ + debian/rules: Drop --fail-missing argument to dh_missing,
+ which is now the default.
+ * Set upstream metadata fields: Repository.
+ * Update standards version to 4.6.2, no changes needed.
+
+ [ Simon Josefsson ]
+ * Add myself as Maintainer, moving nicoo to Uploaders. For ITS.
+ * Bump debian/* copyright years.
+
+ -- Simon Josefsson <[email protected]> Sun, 31 Aug 2025 20:39:43 +0200
+
xe (0.11-5) unstable; urgency=medium
[ Helmut Grohne ]
diff -Nru xe-0.11/debian/control xe-1.0/debian/control
--- xe-0.11/debian/control 2020-11-02 11:43:50.000000000 +0100
+++ xe-1.0/debian/control 2025-08-31 19:08:50.000000000 +0200
@@ -1,9 +1,10 @@
Source: xe
-Maintainer: nicoo <[email protected]>
+Maintainer: Simon Josefsson <[email protected]>
+Uploaders: nicoo <[email protected]>
Section: utils
Priority: optional
-Build-Depends: debhelper-compat (= 12)
-Standards-Version: 4.5.0
+Build-Depends: debhelper-compat (= 13)
+Standards-Version: 4.7.2
Homepage: https://git.vuxu.org/xe/about/
Vcs-Browser: https://salsa.debian.org/debian/xe
Vcs-Git: https://salsa.debian.org/debian/xe.git
diff -Nru xe-0.11/debian/copyright xe-1.0/debian/copyright
--- xe-0.11/debian/copyright 2020-11-02 11:43:50.000000000 +0100
+++ xe-1.0/debian/copyright 2025-08-31 19:10:03.000000000 +0200
@@ -8,6 +8,7 @@
Files: debian/*
Copyright: Copyright (c) 2017-2020 nicoo <[email protected]>
+ Copyright (c) 2025 Simon Josefsson <[email protected]>
License: CC0-1.0
License: CC0-1.0
diff -Nru xe-0.11/debian/gbp.conf xe-1.0/debian/gbp.conf
--- xe-0.11/debian/gbp.conf 2020-11-02 11:43:50.000000000 +0100
+++ xe-1.0/debian/gbp.conf 2025-08-31 19:05:43.000000000 +0200
@@ -1,5 +1,5 @@
[DEFAULT]
upstream-tag = v%(version)s
pristine-tar = True
-debian-branch = debian/sid
+debian-branch = debian/latest
dist = DEP14
diff -Nru xe-0.11/debian/rules xe-1.0/debian/rules
--- xe-0.11/debian/rules 2020-11-02 11:43:50.000000000 +0100
+++ xe-1.0/debian/rules 2025-08-31 19:08:03.000000000 +0200
@@ -13,6 +13,3 @@
override_dh_installchangelogs:
dh_installchangelogs NEWS.md
-
-override_dh_missing:
- dh_missing --fail-missing
diff -Nru xe-0.11/debian/salsa-ci.yml xe-1.0/debian/salsa-ci.yml
--- xe-0.11/debian/salsa-ci.yml 1970-01-01 01:00:00.000000000 +0100
+++ xe-1.0/debian/salsa-ci.yml 2025-08-31 19:05:39.000000000 +0200
@@ -0,0 +1,3 @@
+---
+include:
+ - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/recipes/debian.yml
diff -Nru xe-0.11/debian/upstream/metadata xe-1.0/debian/upstream/metadata
--- xe-0.11/debian/upstream/metadata 1970-01-01 01:00:00.000000000 +0100
+++ xe-1.0/debian/upstream/metadata 2025-08-31 19:08:03.000000000 +0200
@@ -0,0 +1,2 @@
+---
+Repository: https://git.vuxu.org/xe/
diff -Nru xe-0.11/NEWS.md xe-1.0/NEWS.md
--- xe-0.11/NEWS.md 2017-11-05 21:03:12.000000000 +0100
+++ xe-1.0/NEWS.md 2023-08-05 16:34:27.000000000 +0200
@@ -1,5 +1,11 @@
## HEAD
+## 1.0 (2023-08-05)
+
+* Slightly incompatible change: properly forward errors on exec,
+ return 123 on any exit status 1-254 (like GNU xargs).
+* Small bugfixes.
+
## 0.11 (2017-11-05)
* Add zsh completion.
@@ -32,5 +38,5 @@
## 0.7 (2017-04-13)
* Error when the `-A` separator does not appear
-* Bug: fix quoting of empty strings
+* Bugfix: fix quoting of empty strings
* Documentation fixes
diff -Nru xe-0.11/t/errors.t xe-1.0/t/errors.t
--- xe-0.11/t/errors.t 2017-11-05 21:03:12.000000000 +0100
+++ xe-1.0/t/errors.t 2023-08-05 16:34:27.000000000 +0200
@@ -1,7 +1,7 @@
#!/bin/sh
export "PATH=.:$PATH"
-printf '1..13\n'
+printf '1..16\n'
printf '# error handling\n'
tap3 'exit code on success' <<'EOF'
@@ -19,6 +19,27 @@
<<<
a
>>>= 123
+EOF
+
+tap3 'exit code on when command fails with 126' <<'EOF'
+xe -s 'exit 126'
+<<<
+a
+>>>= 123
+EOF
+
+tap3 'exit code on when command fails with 127' <<'EOF'
+xe -s 'exit 127'
+<<<
+a
+>>>= 123
+EOF
+
+tap3 'exit code on when command fails with 250' <<'EOF'
+xe -s 'exit 250'
+<<<
+a
+>>>= 123
EOF
tap3 'exit code on when command fails with 255' <<'EOF'
diff -Nru xe-0.11/t/limits.t xe-1.0/t/limits.t
--- xe-0.11/t/limits.t 2017-11-05 21:03:12.000000000 +0100
+++ xe-1.0/t/limits.t 2023-08-05 16:34:27.000000000 +0200
@@ -15,10 +15,10 @@
EOF
tap3 'argslen check' <<'EOF'
-perl -e 'print "x"x8000, "\n" for 1..42' |
+perl -e 'print "x"x12000, "\n" for 1..23' |
xe -N0 -s 'echo $#'
>>>
-16
-16
10
+10
+3
EOF
diff -Nru xe-0.11/xe.1 xe-1.0/xe.1
--- xe-0.11/xe.1 2017-11-05 21:03:12.000000000 +0100
+++ xe-1.0/xe.1 2023-08-05 16:34:27.000000000 +0200
@@ -1,4 +1,4 @@
-.Dd November 3, 2017
+.Dd August 1, 2023
.Dt XE 1
.Os
.Sh NAME
@@ -100,8 +100,8 @@
The options are as follows:
.Bl -tag -width Ds
.It Fl 0
-Input filenames are separated by NUL bytes (instead of newlines, which
-is the default)
+Input arguments are separated by NUL bytes (instead of newlines, which
+is the default).
.It Fl F
Fatal:
stop and exit when a command execution fails.
@@ -247,7 +247,7 @@
.It 0
on success
.It 123
-if any invocation of the command exited with status 1 to 125.
+if any invocation of the command exited with status 1 to 254.
.It 124
if the command exited with status 255
.It 125
diff -Nru xe-0.11/xe.c xe-1.0/xe.c
--- xe-0.11/xe.c 2017-11-05 21:03:12.000000000 +0100
+++ xe-1.0/xe.c 2023-08-05 16:34:27.000000000 +0200
@@ -99,17 +99,15 @@
my_child:
if (WIFEXITED(status)) {
- if (WEXITSTATUS(status) >= 1 && WEXITSTATUS(status) <= 125) {
+ if (WEXITSTATUS(status) == 255) {
+ fprintf(stderr, "xe: job %ld [pid %ld] exited with status 255\n", children[i].iter, (long)pid);
+ exit(124);
+ } else if (WEXITSTATUS(status) > 0) {
if (Fflag) {
fprintf(stderr, "xe: job %ld [pid %ld] exited with status %d\n", children[i].iter, (long)pid, WEXITSTATUS(status));
exit(123);
}
failed = 1;
- } else if (WEXITSTATUS(status) == 255) {
- fprintf(stderr, "xe: job %ld [pid %ld] exited with status 255\n", children[i].iter, (long)pid);
- exit(124);
- } else if (WEXITSTATUS(status) > 125) {
- exit(WEXITSTATUS(status));
}
} else if (WIFSIGNALED(status)) {
fprintf(stderr, "xe: job %ld [pid %ld] terminated by signal %d\n",
@@ -130,7 +128,7 @@
}
static void
-shquote(const char *s)
+sh_quote(const char *s)
{
if (*s &&
!strpbrk(s, "\001\002\003\004\005\006\007\010"
@@ -159,7 +157,7 @@
for (i = 0; i < argslen; i++) {
if (i > 0)
fprintf(traceout, " ");
- shquote(args[i]);
+ sh_quote(args[i]);
}
fprintf(traceout, "\n");
fflush(traceout);
@@ -232,8 +230,17 @@
exit(126);
}
+ unsigned char status;
+ int alivepipefd[2];
+ if (pipe(alivepipefd) < 0)
+ exit(126);
+ fcntl(alivepipefd[0], F_SETFD, FD_CLOEXEC);
+ fcntl(alivepipefd[1], F_SETFD, FD_CLOEXEC);
+
pid = fork();
if (pid == 0) { // in child
+ close(alivepipefd[0]);
+
char iter[32];
snprintf(iter, sizeof iter, "%ld", iterations);
setenv("ITER", iter, 1);
@@ -268,14 +275,26 @@
execvp(args[0], args);
- int status = (errno == ENOENT ? 127 : 126);
+ status = (errno == ENOENT ? 127 : 126);
+ if (write(alivepipefd[1], &status, 1) != 1) {
+ /* ignored */
+ }
fprintf(stderr, "xe: %s: %s\n", args[0], strerror(errno));
- exit(status);
+ _exit(status);
} else if (pid < 0) { // fork failed
fprintf(stderr, "xe: %s: %s\n", args[0], strerror(errno));
exit(126);
}
+ close(alivepipefd[1]);
+ if (read(alivepipefd[0], &status, 1) == 1) {
+ if (status == 126)
+ exit(126);
+ if (status == 127)
+ exit(127);
+ }
+ close(alivepipefd[0]);
+
if (Lflag) {
long iter = iterations;
lpid = fork();
@@ -299,7 +318,7 @@
if (vflag > 1 || Lflag > 1)
printf("%04ld= ", iter);
fwrite(line, 1, rd, stdout);
- };
+ }
}
if (lpid < 0)
exit(126);
signature.asc
Description: PGP signature
--- End Message ---