annotate vendor/pear/archive_tar/scripts/phptar.in @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
rev   line source
Chris@5 1 #!@prefix@/bin/php -Cq
Chris@5 2 <?php // -*- PHP -*-
Chris@5 3
Chris@5 4 // {{{ setup
Chris@5 5
Chris@5 6 define('S_IFDIR', 0040000); // Directory
Chris@5 7 define('S_IFCHR', 0020000); // Character device
Chris@5 8 define('S_IFBLK', 0060000); // Block device
Chris@5 9 define('S_IFREG', 0100000); // Regular file
Chris@5 10 define('S_IFIFO', 0010000); // FIFO
Chris@5 11 define('S_IFLNK', 0120000); // Symbolic link
Chris@5 12 define('S_IFSOCK', 0140000); // Socket
Chris@5 13
Chris@5 14 require_once "PEAR.php";
Chris@5 15 require_once "Archive/Tar.php";
Chris@5 16 require_once "Console/Getopt.php";
Chris@5 17
Chris@5 18 // }}}
Chris@5 19 // {{{ options
Chris@5 20
Chris@5 21 $verbose = false;
Chris@5 22 $op_create = false;
Chris@5 23 $op_list = false;
Chris@5 24 $op_extract = false;
Chris@5 25 $use_gzip = false;
Chris@5 26 $file = '';
Chris@5 27
Chris@5 28 $progname = basename(array_shift($argv));
Chris@5 29
Chris@5 30 $options = Console_Getopt::getopt($argv, "h?ctxvzf:");
Chris@5 31 if (PEAR::isError($options)) {
Chris@5 32 usage($options);
Chris@5 33 }
Chris@5 34
Chris@5 35 $opts = $options[0];
Chris@5 36 foreach ($opts as $opt) {
Chris@5 37 switch ($opt[0]) {
Chris@5 38 case 'v': {
Chris@5 39 $verbose = true;
Chris@5 40 break;
Chris@5 41 }
Chris@5 42 case 'c': {
Chris@5 43 $op_create = true;
Chris@5 44 break;
Chris@5 45 }
Chris@5 46 case 't': {
Chris@5 47 $op_list = true;
Chris@5 48 break;
Chris@5 49 }
Chris@5 50 case 'x': {
Chris@5 51 $op_extract = true;
Chris@5 52 break;
Chris@5 53 }
Chris@5 54 case 'z': {
Chris@5 55 $use_gzip = true;
Chris@5 56 break;
Chris@5 57 }
Chris@5 58 case 'f': {
Chris@5 59 $file = $opt[1];
Chris@5 60 break;
Chris@5 61 }
Chris@5 62 case 'h':
Chris@5 63 case '?': {
Chris@5 64 usage();
Chris@5 65 break;
Chris@5 66 }
Chris@5 67 }
Chris@5 68 }
Chris@5 69
Chris@5 70 if ($op_create + $op_list + $op_extract > 1) {
Chris@5 71 usage("Only one of -c, -t and -x can be specified at once!");
Chris@5 72 }
Chris@5 73
Chris@5 74 if ($op_create + $op_list + $op_extract == 0) {
Chris@5 75 usage("Please specify either -c, -t or -x!");
Chris@5 76 }
Chris@5 77
Chris@5 78 if (empty($file)) {
Chris@5 79 if ($op_create) {
Chris@5 80 $file = "php://stdout";
Chris@5 81 } else {
Chris@5 82 $file = "php://stdin";
Chris@5 83 }
Chris@5 84 }
Chris@5 85
Chris@5 86 // }}}
Chris@5 87
Chris@5 88 $tar = new Archive_Tar($file, $use_gzip);
Chris@5 89 $tar->setErrorHandling(PEAR_ERROR_DIE, "$progname error: %s\n");
Chris@5 90
Chris@5 91 if ($op_create) {
Chris@5 92 do_create($tar, $options[1]);
Chris@5 93 $tar->create($options[1]);
Chris@5 94 } elseif ($op_list) {
Chris@5 95 do_list($tar, $verbose);
Chris@5 96 } elseif ($op_extract) {
Chris@5 97 do_extract($tar);
Chris@5 98 }
Chris@5 99
Chris@5 100 // {{{ getrwx()
Chris@5 101
Chris@5 102 function getrwx($bits) {
Chris@5 103 $str = '';
Chris@5 104 $str .= ($bits & 4) ? 'r' : '-';
Chris@5 105 $str .= ($bits & 2) ? 'w' : '-';
Chris@5 106 $str .= ($bits & 1) ? 'x' : '-';
Chris@5 107 return $str;
Chris@5 108 }
Chris@5 109
Chris@5 110 // }}}
Chris@5 111 // {{{ getfiletype()
Chris@5 112
Chris@5 113 function getfiletype($bits) {
Chris@5 114 static $map = array(
Chris@5 115 '-' => S_IFREG,
Chris@5 116 'd' => S_IFDIR,
Chris@5 117 'l' => S_IFLNK,
Chris@5 118 'c' => S_IFCHR,
Chris@5 119 'b' => S_IFBLK,
Chris@5 120 'p' => S_IFIFO,
Chris@5 121 's' => S_IFSOCK,
Chris@5 122 );
Chris@5 123 foreach ($map as $char => $mask) {
Chris@5 124 if ($bits & $mask) {
Chris@5 125 return $char;
Chris@5 126 }
Chris@5 127 }
Chris@5 128 }
Chris@5 129
Chris@5 130 // }}}
Chris@5 131 // {{{ getuser()
Chris@5 132
Chris@5 133 function getuser($uid) {
Chris@5 134 static $cache = array();
Chris@5 135 if (isset($cache[$uid])) {
Chris@5 136 return $cache[$uid];
Chris@5 137 }
Chris@5 138 if (function_exists("posix_getpwuid")) {
Chris@5 139 if (is_array($user = @posix_getpwuid($uid))) {
Chris@5 140 $cache[$uid] = $user['name'];
Chris@5 141 return $user['name'];
Chris@5 142 }
Chris@5 143 }
Chris@5 144 $cache[$uid] = $uid;
Chris@5 145 return $uid;
Chris@5 146 }
Chris@5 147
Chris@5 148 // }}}
Chris@5 149 // {{{ getgroup()
Chris@5 150
Chris@5 151 function getgroup($gid) {
Chris@5 152 static $cache = array();
Chris@5 153 if (isset($cache[$gid])) {
Chris@5 154 return $cache[$gid];
Chris@5 155 }
Chris@5 156 if (function_exists("posix_getgrgid")) {
Chris@5 157 if (is_array($group = @posix_getgrgid($gid))) {
Chris@5 158 $cache[$gid] = $group['name'];
Chris@5 159 return $group['name'];
Chris@5 160 }
Chris@5 161 }
Chris@5 162 $cache[$gid] = $gid;
Chris@5 163 return $gid;
Chris@5 164 }
Chris@5 165
Chris@5 166 // }}}
Chris@5 167 // {{{ do_create()
Chris@5 168
Chris@5 169 function do_create(&$tar, &$files)
Chris@5 170 {
Chris@5 171 $tar->create($files);
Chris@5 172 }
Chris@5 173
Chris@5 174 // }}}
Chris@5 175 // {{{ do_list()
Chris@5 176
Chris@5 177 function do_list(&$tar, $verbose)
Chris@5 178 {
Chris@5 179 static $rwx = array(4 => 'r', 2 => 'w', 1 => 'x');
Chris@5 180 $files = $tar->listContent();
Chris@5 181 if (is_array($files) && sizeof($files) > 0) {
Chris@5 182 foreach ($files as $file) {
Chris@5 183 if ($verbose) {
Chris@5 184 $fm = (int)$file['mode'];
Chris@5 185 $mode = sprintf('%s%s%s%s', getfiletype($fm),
Chris@5 186 getrwx(($fm >> 6) & 7), getrwx(($fm >> 3) & 7),
Chris@5 187 getrwx($fm & 7));
Chris@5 188 $owner = getuser($file['uid']) . '/' . getgroup($file['gid']);
Chris@5 189 printf("%10s %-11s %7d %s %s\n", $mode, $owner, $file['size'],
Chris@5 190 date('Y-m-d H:i:s', $file['mtime']), $file['filename']);
Chris@5 191 } else {
Chris@5 192 printf("%s\n", $file['filename']);
Chris@5 193 }
Chris@5 194 }
Chris@5 195 }
Chris@5 196 }
Chris@5 197
Chris@5 198 // }}}
Chris@5 199 // {{{ do_extract()
Chris@5 200
Chris@5 201 function do_extract(&$tar, $destdir = ".")
Chris@5 202 {
Chris@5 203 $tar->extract($destdir);
Chris@5 204 }
Chris@5 205
Chris@5 206 // }}}
Chris@5 207 // {{{ usage()
Chris@5 208
Chris@5 209 function usage($errormsg = '')
Chris@5 210 {
Chris@5 211 global $progname;
Chris@5 212 $fp = fopen("php://stderr", "w");
Chris@5 213 if ($errormsg) {
Chris@5 214 if (PEAR::isError($errormsg)) {
Chris@5 215 fwrite($fp, $errormsg->getMessage() . "\n");
Chris@5 216 } else {
Chris@5 217 fwrite($fp, "$errormsg\n");
Chris@5 218 }
Chris@5 219 }
Chris@5 220 fwrite($fp, "$progname [-h|-?] {-c|-t|-x} [-z] [-v] [-f file] [file(s)...]
Chris@5 221 Options:
Chris@5 222 -h, -? Show this screen
Chris@5 223 -c Create archive
Chris@5 224 -t List archive
Chris@5 225 -x Extract archive
Chris@5 226 -z Run input/output through gzip
Chris@5 227 -f file Use <file> as input or output (default is stdin/stdout)
Chris@5 228
Chris@5 229 ");
Chris@5 230 fclose($fp);
Chris@5 231 exit;
Chris@5 232 }
Chris@5 233
Chris@5 234 // }}}
Chris@5 235
Chris@5 236 ?>