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

