mirror of
https://github.com/gluster/glusterfs.git
synced 2026-02-05 15:48:40 +01:00
The jenkins release-new job runs on a CentOS 7 box, which does not have python3. As a result it runs (autogen.sh and) configure before producing the dist tar file, converting all the python3 shebangs to python2 shebangs in the dist tar file. Then when that tar file is "carried" to, e.g. Fedora koji build system to build packages, the shebangs are incorrect, despite having originally been correct in the git repo. Change-Id: I5154baba3f6d29d3c4823bafc2b57abecbf90e5b updates: #411 Signed-off-by: Kaleb S. KEITHLEY <kkeithle@redhat.com>
134 lines
4.9 KiB
Python
Executable File
134 lines
4.9 KiB
Python
Executable File
|
|
from __future__ import print_function
|
|
import os
|
|
import sys
|
|
from optparse import OptionParser
|
|
|
|
import xattr
|
|
|
|
def handle_textencoding(attr):
|
|
### required for Python's handling of NULL strings.
|
|
attr_null_replace = (attr.encode('hex').decode('hex')).replace('\x00',
|
|
'\\000')
|
|
return attr_null_replace
|
|
|
|
def getfattr(path, option):
|
|
attr = xattr.getxattr(path, option.name)
|
|
encoded_attr = attr
|
|
|
|
if option.encoding == "text":
|
|
## special case handle it.
|
|
encoded_attr = handle_textencoding(attr)
|
|
else:
|
|
encoded_attr = attr.encode(option.encoding)
|
|
|
|
if option.onlyvalues:
|
|
print (encoded_attr)
|
|
return
|
|
|
|
print_getfattr (path, option, encoded_attr)
|
|
return
|
|
|
|
def print_getfattr (path, option, encoded_attr=None):
|
|
if encoded_attr:
|
|
if option.encoding == "hex":
|
|
print(("%s=0x%s" % (option.name, encoded_attr)))
|
|
elif option.encoding == "base64":
|
|
print(("%s=0s%s" % (option.name, encoded_attr)))
|
|
else:
|
|
print(("%s=\"%s\"" % (option.name, encoded_attr)))
|
|
else:
|
|
print(option.name)
|
|
|
|
return
|
|
|
|
def print_header (path, absnames):
|
|
if absnames:
|
|
print(("# file: %s" % path))
|
|
else:
|
|
print ("getfattr: Removing leading '/' from absolute path names")
|
|
print(("# file: %s" % path[1:]))
|
|
|
|
if __name__ == '__main__':
|
|
usage = "usage: %prog [-n name|-d] [-e en] [-m pattern] path...."
|
|
parser = OptionParser(usage=usage)
|
|
parser.add_option("-n", action="store", dest="name", type="string",
|
|
help="Dump the value of the named extended attribute"
|
|
" extended attribute.")
|
|
parser.add_option("-d", action="store_true", dest="dump",
|
|
help="Dump the values of all extended attributes"
|
|
" associated with pathname.")
|
|
parser.add_option("-e", action="store", dest="encoding", type="string",
|
|
default="base64",
|
|
help="Encode values after retrieving"
|
|
" them. Valid values of [en] are `text`, `hex`,"
|
|
" and `base64`. Values encoded as text strings are"
|
|
" enclosed in double quotes (\"), while strings"
|
|
" encoded as hexadecimal and base64 are prefixed with"
|
|
" 0x and 0s, respectively.")
|
|
parser.add_option("-m", action="store", dest="pattern", type="string",
|
|
help="Only include attributes with names matching the"
|
|
" regular expression pattern. The default value for"
|
|
" pattern is \"^user\\.\", which includes all the"
|
|
" attributes in the user namespace. Specify \"-\" for"
|
|
" including all attributes. Refer to attr(5) for a more"
|
|
" detailed discussion of namespaces.")
|
|
parser.add_option("--absolute-names", action="store_true", dest="absnames",
|
|
help="Do not strip leading slash characters ('/')."
|
|
" The default behaviour is to strip leading slash characters.")
|
|
parser.add_option("--only-values", action="store_true", dest="onlyvalues",
|
|
help="Dump out the raw extended attribute value(s)"
|
|
" without encoding them.")
|
|
|
|
(option, args) = parser.parse_args()
|
|
if not args:
|
|
print ("Usage: getfattr [-hRLP] [-n name|-d] [-e en] [-m pattern]"
|
|
" path...")
|
|
print ("Try `getfattr --help' for more information.")
|
|
sys.exit(1)
|
|
|
|
if option.dump and option.name:
|
|
print ("-d and -n are mutually exclusive...")
|
|
sys.exit(1)
|
|
|
|
if option.pattern and option.name:
|
|
print ("-m and -n are mutually exclusive...")
|
|
sys.exit(1)
|
|
|
|
if option.encoding:
|
|
if (not (option.encoding.strip() == "hex" or
|
|
option.encoding.strip() == "base64" or
|
|
option.encoding.strip() == "text")):
|
|
print(("unrecognized encoding parameter... %s, please use"
|
|
" `text`, `base64` or `hex`" % option.encoding))
|
|
sys.exit(1)
|
|
|
|
args[0] = os.path.abspath(args[0])
|
|
|
|
if option.name:
|
|
print_header(args[0], option.absnames)
|
|
try:
|
|
getfattr(args[0], option)
|
|
except KeyError as err:
|
|
print(("Invalid key %s" % err))
|
|
sys.exit(1)
|
|
except IOError as err:
|
|
print (err)
|
|
sys.exit(1)
|
|
|
|
if option.pattern:
|
|
print_header(args[0], option.absnames)
|
|
try:
|
|
xattrs = xattr.listxattr(args[0])
|
|
for attr in xattrs:
|
|
if option.dump:
|
|
option.name = attr.encode('utf-8')
|
|
getfattr(args[0], option)
|
|
else:
|
|
option.name = attr.encode('utf-8')
|
|
print_getfattr(args[0], option, None)
|
|
|
|
except IOError as err:
|
|
print (err)
|
|
sys.exit(1)
|