<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>