<pre style='margin:0'>
Marius Schamschula (Schamschula) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/713c22863e4fe2624bc455f9bf6818118e53b987">https://github.com/macports/macports-ports/commit/713c22863e4fe2624bc455f9bf6818118e53b987</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 713c22863e4 xar: Fix to-stdout functionality
</span>713c22863e4 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 713c22863e4fe2624bc455f9bf6818118e53b987
</span>Author: Ryan Schmidt <ryandesign@macports.org>
AuthorDate: Thu Mar 10 06:25:34 2022 -0600
<span style='display:block; white-space:pre;color:#404040;'> xar: Fix to-stdout functionality
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://trac.macports.org/ticket/64775
</span>---
archivers/xar/Portfile | 2 +-
archivers/xar/files/patch-stdout.diff | 151 ++++++++++++++++++++++++++--------
2 files changed, 119 insertions(+), 34 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/archivers/xar/Portfile b/archivers/xar/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 20d4e7e48b0..56e851f200d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/archivers/xar/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/archivers/xar/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -7,7 +7,7 @@ PortGroup openssl 1.0
</span> name xar
set apple_version 452
version 1.8.0.${apple_version}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 4
</span>
categories archivers sysutils
platforms darwin freebsd linux
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/archivers/xar/files/patch-stdout.diff b/archivers/xar/files/patch-stdout.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index 37607e20227..3d3d4d88b01 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/archivers/xar/files/patch-stdout.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/archivers/xar/files/patch-stdout.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,22 +1,100 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- src/xar.c.orig 2022-03-09 07:52:07.000000000 -0600
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ src/xar.c 2022-03-09 19:29:08.000000000 -0600
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -53,8 +53,15 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "config.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "../lib/filetree.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "util.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define MIN_XAR_NEW_OPTIONS 0x01060180
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define SYMBOLIC 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define NUMERIC 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static unsigned long xar_lib_version = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static int xar_lib_version_fetched = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Add the capability to extract to stdout. Relevant parts from:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/mackyle/xar/commit/312a71a77dff76c4bf6ebc8d7a9e64ca1322d8dd 2012-09-15T07:10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/mackyle/xar/commit/ba57887b34af69e786b35b34762ab06f17135e2b 2012-09-15T07:29
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/mackyle/xar/commit/ddea2e4b53b6b2cfdd0d13c6beaac0978330c2a2 2012-09-15T07:33
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- include/xar.h.in.orig 2019-02-14 18:05:37.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ include/xar.h.in 2022-03-10 06:07:31.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -134,6 +134,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define XAR_OPT_VAL_TRUE "true"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define XAR_OPT_VAL_FALSE "false"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define XAR_OPT_EXTRACTSTDOUT "extract-stdout" /* Extract data to stdout instead of file (true/false) */
</span> +
<span style='display:block; white-space:pre;background:#ffe0e0;'>- static int Perms = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static int Local = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static char *Subdoc = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -73,6 +80,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* xar signing algorithms */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define XAR_SIG_SHA1RSA 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- lib/archive.c.orig 2022-03-10 05:12:27.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ lib/archive.c 2022-03-10 06:17:03.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -876,6 +876,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if( (strcmp(option, XAR_OPT_TOCCKSUM) == 0) ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ XAR(x)->heap_offset = xar_io_get_toc_checksum_length_for_type(value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ((strcmp(option, XAR_OPT_EXTRACTSTDOUT) == 0)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ XAR(x)->tostdout = strcmp(value, XAR_OPT_VAL_TRUE) == 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* This was an edit from xar-1.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Looks like we would only allow one definition for a particular key in this list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1488,26 +1491,39 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *tmp1, *dname;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xar_file_t tmpf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if( (strstr(XAR_FILE(f)->fspath, "/") != NULL) && (stat(XAR_FILE(f)->fspath, &sb)) && (XAR_FILE(f)->parent_extracted == 0) ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- tmp1 = strdup(XAR_FILE(f)->fspath);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- dname = xar_safe_dirname(tmp1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- tmpf = xar_file_find(XAR(x)->files, dname);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if( !tmpf ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- xar_err_set_string(x, "Unable to find file");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- xar_err_callback(x, XAR_SEVERITY_NONFATAL, XAR_ERR_ARCHIVE_EXTRACTION);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- free(dname);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- free(tmp1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- XAR_FILE(f)->parent_extracted++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int32_t result = xar_extract(x, tmpf);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (result < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (XAR(x)->tostdout) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ char *buffer = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ size_t bsize = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int32_t result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ((result = xar_extract_tobuffersz(x, f, &buffer, &bsize)) != 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (bsize && buffer && fwrite(buffer, bsize, 1, stdout) != 1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ result = -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ free(buffer);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if( (strstr(XAR_FILE(f)->fspath, "/") != NULL) && (stat(XAR_FILE(f)->fspath, &sb)) && (XAR_FILE(f)->parent_extracted == 0) ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tmp1 = strdup(XAR_FILE(f)->fspath);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ dname = xar_safe_dirname(tmp1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tmpf = xar_file_find(XAR(x)->files, dname);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if( !tmpf ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ xar_err_set_string(x, "Unable to find file");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ xar_err_callback(x, XAR_SEVERITY_NONFATAL, XAR_ERR_ARCHIVE_EXTRACTION);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ free(dname);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ free(tmp1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ XAR_FILE(f)->parent_extracted++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int32_t result = xar_extract(x, tmpf);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (result < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return xar_extract_tofile(x, f, XAR_FILE(f)->fspath);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return xar_extract_tofile(x, f, XAR_FILE(f)->fspath);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int32_t xar_verify_progress(xar_t x, xar_file_t f, xar_progress_callback p) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- lib/archive.h.orig 2022-03-10 05:12:27.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ lib/archive.h 2022-03-10 05:45:47.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -101,6 +101,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int toc_hash_size; /* size of toc hash that was copied during archive open */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void *toc_hash; /* copy of the toc hash copied during archive open */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int skipwarn;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int tostdout;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct stat sbcache;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/xar.c.orig 2022-03-10 05:12:27.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/xar.c 2022-03-10 05:39:41.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -73,6 +73,7 @@
</span> static int LinkSame = 0;
static int NoOverwrite = 0;
static int SaveSuid = 0;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -24,7 +102,17 @@
</span>
struct lnode {
char *str;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -457,24 +465,27 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -383,6 +384,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if( SaveSuid ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xar_opt_set(x, XAR_OPT_SAVESUID, XAR_OPT_VAL_TRUE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (ToStdout) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ xar_opt_set(x, XAR_OPT_EXTRACTSTDOUT, XAR_OPT_VAL_TRUE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ iter = xar_iter_new();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if( !iter ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -457,24 +461,28 @@
</span>
if( matched ) {
struct stat sb;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -36,12 +124,13 @@
</span> int deferred = 0;
if( xar_prop_get(f, "type", &prop) == 0 && prop != NULL ) {
if( strcmp(prop, "directory") == 0 ) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (!ToStdout) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct lnode *tmpl = calloc(sizeof(struct lnode),1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- struct lnode *tmpl = calloc(sizeof(struct lnode),1);
</span> - tmpl->str = (char *)f;
- tmpl->next = dirs;
- dirs = tmpl;
- deferred = 1;
<span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!ToStdout) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct lnode *tmpl = calloc(sizeof(struct lnode),1);
</span> + tmpl->str = (char *)f;
+ tmpl->next = dirs;
+ dirs = tmpl;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -51,7 +140,7 @@
</span> }
if( ! deferred ) {
- files_extracted++;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-- print_file(x, f);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ print_file(x, f);
</span> - xar_extract(x, f);
+ if (xar_extract(x, f) == 0)
+ files_extracted++;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -60,7 +149,7 @@
</span> }
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -859,6 +870,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -859,6 +867,8 @@
</span> fprintf(stderr, "\t to a document in cwd named <name>.xml\n");
fprintf(stderr, "\t--exclude POSIX regular expression of files to \n");
fprintf(stderr, "\t ignore while archiving.\n");
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -69,15 +158,15 @@
</span> fprintf(stderr, "\t--rsize Specifies the size of the buffer used\n");
fprintf(stderr, "\t for read IO operations in bytes.\n");
fprintf(stderr, "\t--coalesce-heap When archived files are identical, only store one copy\n");
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -917,6 +953,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -917,6 +927,7 @@
</span> {"keep-existing", no_argument, 0, 15},
{"keep-setuid", no_argument, 0, 16},
{"compression-args", required_argument, 0, 17},
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ {"to-stdout", no_argument, 0, 'O'},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {"to-stdout", no_argument, 0, 'O'},
</span> { 0, 0, 0, 0}
};
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -925,7 +962,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -925,7 +936,7 @@
</span> exit(1);
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -86,17 +175,13 @@
</span> switch(c) {
case 1 : // toc-cksum
if( !optarg ) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1150,6 +1187,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1150,6 +1161,9 @@
</span> case 'l': // stay on local device
Local = 1;
break;
+ case 'O':
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (xar_lib_version < MIN_XAR_NEW_OPTIONS) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ fprintf(stderr, "--to-stdout requires a newer xar library\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ exit(1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ToStdout = 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ToStdout = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span> case 'n': // provide subdocument name
SubdocName = optarg;
break;
</pre><pre style='margin:0'>
</pre>