diff --git a/0006-fpaste-0.3.7.1-correct-syntax-options.patch b/0006-fpaste-0.3.7.1-correct-syntax-options.patch new file mode 100644 index 0000000..a880d11 --- /dev/null +++ b/0006-fpaste-0.3.7.1-correct-syntax-options.patch @@ -0,0 +1,215 @@ +--- fpaste 2013-07-14 01:41:33.990948757 +0100 ++++ fpaste.syn-patch 2013-07-14 01:39:13.848014651 +0100 +@@ -260,10 +260,210 @@ + + def main(): + validExpiresOpts = [ '3600', '10800', '43200', '86400' ] +- validSyntaxOpts = [ 'abap', 'antlr', 'antlr-as', 'antlr-cpp', 'antlr-csharp', 'antlr-java', 'antlr-objc', 'antlr-perl', 'antlr-python', 'antlr-ruby', 'apacheconf', 'applescript', 'as', 'as3', 'aspx-cs', 'aspx-vb', 'basemake', 'bash', 'bat', 'bbcode', 'befunge', 'boo', 'brainfuck', 'c', 'c-objdump', 'cheetah', 'clojure', 'common-lisp', 'console', 'control', 'cpp', 'cpp-objdump', 'csharp', 'css', 'css+django', 'css+erb', 'css+genshitext', 'css+mako', 'css+myghty', 'css+php', 'css+smarty', 'cython', 'd', 'd-objdump', 'delphi', 'diff', 'django', 'dpatch', 'dylan', 'erb', 'erl', 'erlang', 'evoque', 'fortran', 'gas', 'genshi', 'genshitext', 'glsl', 'gnuplot', 'groff', 'haskell', 'html', 'html+cheetah', 'html+django', 'html+evoque', 'html+genshi', 'html+mako', 'html+myghty', 'html+php', 'html+smarty', 'ini', 'io', 'irc', 'java', 'js', 'js+cheetah', 'js+django', 'js+erb', 'js+genshitext', 'js+mako', 'js+myghty', 'js+php', 'js+smarty', 'jsp', 'lhs', 'lighty', 'llvm', 'logtalk', 'lua', 'make', 'mako', 'matlab', 'matlabsession', 'minid', 'modelica', 'moocode', 'mupad', 'mxml', 'myghty', 'mysql', 'nasm', 'newspeak', 'nginx', 'numpy', 'objdump', 'objective-c', 'ocaml', 'perl', 'php', 'pot', 'pov', 'prolog', 'py3tb', 'pycon', 'pytb', 'python', 'python3', 'ragel', 'ragel-c', 'ragel-cpp', 'ragel-d', 'ragel-em', 'ragel-java', 'ragel-objc', 'ragel-ruby', 'raw', 'rb', 'rbcon', 'rebol', 'redcode', 'rhtml', 'rst', 'scala', 'scheme', 'smalltalk', 'smarty', 'sourceslist', 'splus', 'sql', 'sqlite3', 'squidconf', 'tcl', 'tcsh', 'tex', 'text', 'trac-wiki', 'vala', 'vb.net', 'vim', 'xml', 'xml+cheetah', 'xml+django', 'xml+erb', 'xml+evoque', 'xml+mako', 'xml+myghty', 'xml+php', 'xml+smarty', 'xslt', 'yaml' ] ++ validSyntaxOpts = [ "cpp", ++ "diff", ++ "gdb", ++ "javascript", ++ "text", ++ "perl", ++ "php", ++ "python", ++ "ruby", ++ "xml", ++ "abap", ++ "6502acme", ++ "actionscript", ++ "actionscript3", ++ "ada", ++ "algol68", ++ "apache", ++ "applescript", ++ "apt_sources", ++ "asm", ++ "asp", ++ "autoconf", ++ "autohotkey", ++ "autoit", ++ "avisynth", ++ "awk", ++ "bash", ++ "basic4gl", ++ "bf", ++ "bibtex", ++ "blitzbasic", ++ "bnf", ++ "boo", ++ "c", ++ "c_loadrunner", ++ "c_mac", ++ "caddcl", ++ "cadlisp", ++ "cfdg", ++ "cfm", ++ "chaiscript", ++ "cil", ++ "clojure", ++ "cmake", ++ "cobol", ++ "cpp", ++ "cpp-qt", ++ "csharp", ++ "css", ++ "cuesheet", ++ "d", ++ "dcs", ++ "delphi", ++ "diff", ++ "div", ++ "dos", ++ "dot", ++ "e", ++ "ecmascript", ++ "eiffel", ++ "email", ++ "epc", ++ "erlang", ++ "f1", ++ "falcon", ++ "fo", ++ "fortran", ++ "freebasic", ++ "fsharp", ++ "4cs", ++ "gambas", ++ "gdb", ++ "genero", ++ "genie", ++ "gettext", ++ "glsl", ++ "gml", ++ "gnuplot", ++ "go", ++ "groovy", ++ "gwbasic", ++ "haskell", ++ "hicest", ++ "68000devpac", ++ "hq9plus", ++ "html4strict", ++ "icon", ++ "idl", ++ "ini", ++ "inno", ++ "intercal", ++ "io", ++ "j", ++ "java", ++ "java5", ++ "javascript", ++ "jquery", ++ "6502kickass", ++ "kixtart", ++ "klonec", ++ "klonecpp", ++ "latex", ++ "lb", ++ "lisp", ++ "locobasic", ++ "logtalk", ++ "lolcode", ++ "lotusformulas", ++ "lotusscript", ++ "lscript", ++ "lsl2", ++ "lua", ++ "m68k", ++ "magiksf", ++ "make", ++ "mapbasic", ++ "matlab", ++ "mirc", ++ "mmix", ++ "modula2", ++ "modula3", ++ "mpasm", ++ "mxml", ++ "mysql", ++ "newlisp", ++ "nsis", ++ "oberon2", ++ "objc", ++ "objeck", ++ "ocaml", ++ "ocaml-brief" , ++ "oobas", ++ "oracle11", ++ "oracle8", ++ "oxygene", ++ "oz", ++ "pascal", ++ "pcre", ++ "per", ++ "perl", ++ "perl6", ++ "pf", ++ "php", ++ "php-brief", ++ "pic16", ++ "pike", ++ "pixelbender", ++ "plsql", ++ "postgresql", ++ "povray", ++ "powerbuilder", ++ "powershell", ++ "progress", ++ "prolog", ++ "properties", ++ "providex", ++ "purebasic", ++ "python", ++ "q", ++ "qbasic", ++ "rails", ++ "rebol", ++ "reg", ++ "robots", ++ "rpmspec", ++ "rsplus", ++ "ruby", ++ "sas", ++ "scala", ++ "scheme", ++ "scilab", ++ "sdlbasic", ++ "smalltalk", ++ "smarty", ++ "sql", ++ "systemverilog", ++ "6502tasm", ++ "tcl", ++ "teraterm", ++ "text", ++ "thinbasic", ++ "tsql", ++ "typoscript", ++ "unicon", ++ "vala", ++ "vb", ++ "vbnet", ++ "verilog", ++ "vhdl", ++ "vim", ++ "visualfoxpro", ++ "visualprolog", ++ "whitespace", ++ "whois", ++ "winbatch", ++ "xbasic", ++ "xml", ++ "xorg_conf", ++ "xpp", ++ "z80", ++ "zxbasic" ] + validClipboardSelectionOpts = [ 'primary', 'secondary', 'clipboard' ] + validPrivateOpts = [ 'yes', 'no'] +- ext2lang_map = { 'sh':'bash', 'bash':'bash', 'bat':'bat', 'c':'c', 'h':'c', 'cpp':'cpp', 'css':'css', 'html':'html', 'htm':'html', 'ini':'ini', 'java':'java', 'js':'js', 'jsp':'jsp', 'pl':'perl', 'php':'php', 'php3':'php', 'py':'python', 'rb':'rb', 'rhtml':'rhtml', 'sql':'sql', 'sqlite':'sqlite3', 'tcl':'tcl', 'vim':'vim', 'xml':'xml' } ++ ext2lang_map = { 'sh':'bash', 'bash':'bash', 'bat':'bat', 'c':'c', 'h':'c', 'cpp':'cpp', 'css':'css', 'html':'html4strict', 'htm':'html4strict', 'ini':'ini', 'java':'java', 'js':'javascript', 'jsp':'java', 'pl':'perl', 'php':'php', 'php3':'php', 'py':'python', 'rb':'ruby', 'rhtml':'html4strict', 'sql':'sql', 'sqlite':'sql', 'tcl':'tcl', 'vim':'vim', 'xml':'xml' } + + usage = """\ + Usage: %%prog [OPTION]... [FILE]... diff --git a/0007-fpaste-0.3.7.1-correct-expire-options.patch b/0007-fpaste-0.3.7.1-correct-expire-options.patch new file mode 100644 index 0000000..052d6bc --- /dev/null +++ b/0007-fpaste-0.3.7.1-correct-expire-options.patch @@ -0,0 +1,21 @@ +--- fpaste.orig 2014-01-23 15:10:14.966463373 +1100 ++++ fpaste 2014-01-23 15:39:25.037951793 +1100 +@@ -259,7 +259,7 @@ + + + def main(): +- validExpiresOpts = [ '3600', '10800', '43200', '86400' ] ++ validExpiresOpts = [ '1800', '21600', '86400', '604800', '2592000'] + validSyntaxOpts = [ "cpp", + "diff", + "gdb", +@@ -503,7 +503,8 @@ + fpasteProg_group.add_option('', '--confirm', dest='confirm', help='print paste, and prompt for confirmation before sending', action="store_true", default=False) + parser.add_option_group(fpasteProg_group) + +- parser.set_defaults(desc='', nick='', lang='text', make_private='yes', expires=max(validExpiresOpts), selection='primary', url=FPASTE_URL ) ++ parser.set_defaults(desc='', nick='', lang='text', make_private='yes', ++ expires='2592000', selection='primary', url=FPASTE_URL ) + (options, args) = parser.parse_args() + + # Check for trailing slash diff --git a/0008-fpaste-0.3.7.1-remove-description-option.patch b/0008-fpaste-0.3.7.1-remove-description-option.patch new file mode 100644 index 0000000..1db968f --- /dev/null +++ b/0008-fpaste-0.3.7.1-remove-description-option.patch @@ -0,0 +1,70 @@ +--- fpaste.orig 2014-01-23 16:13:28.427862452 +1100 ++++ fpaste 2014-01-23 16:14:07.518576961 +1100 +@@ -86,7 +86,6 @@ + + # if sent data exceeds maxlength, server dies without error returned, so, we'll truncate the input here, + # until the server decides to truncate instead of die +- title = options.desc + author = options.nick + if len(title) > 120: # limits from maxlength attr of fpaste.org form + title = title[0:120-3] + "..." +@@ -483,7 +482,6 @@ + # pastebin-specific options first + fpasteOrg_group = OptionGroup(parser, "fpaste.org Options") + fpasteOrg_group.add_option('-n', dest='nick', help='your nickname; default is "%default"', metavar='"NICKNAME"') +- fpasteOrg_group.add_option('-d', dest='desc', help='description of paste; default appends filename(s)', metavar='"DESCRIPTION"') + fpasteOrg_group.add_option('-l', dest='lang', help='language of content for syntax highlighting; default is "%default"; use "list" to show all ' + str(len(validSyntaxOpts)) + ' supported langs', metavar='"LANGUAGE"') + fpasteOrg_group.add_option('-x', dest='expires', help='time before paste is removed; default is %default seconds; valid options: ' + ', '.join(validExpiresOpts), metavar='EXPIRES') + #fpasteOrg_group.add_option('-P', dest='paste_private', help='make paste private; default is %default', + ', '.join(validPrivateOpts), metavar='"PRIVATE"') +@@ -503,7 +501,7 @@ + fpasteProg_group.add_option('', '--confirm', dest='confirm', help='print paste, and prompt for confirmation before sending', action="store_true", default=False) + parser.add_option_group(fpasteProg_group) + +- parser.set_defaults(desc='', nick='', lang='text', make_private='yes', ++ parser.set_defaults(nick='', lang='text', make_private='yes', + expires='2592000', selection='primary', url=FPASTE_URL ) + (options, args) = parser.parse_args() + +@@ -558,31 +556,19 @@ + parser.error("'xsel' failure. this usually means you're not running X") + if not text: + parser.error("%s clipboard is empty" % options.selection) +- if SET_DESCRIPTION_IF_EMPTY and not options.desc: +- #options.desc = '%s clipboard' % options.selection +- options.desc = summarize_text(text) + elif options.pasteself: + text = open(sys.argv[0]).read() +- options.desc = 'fpaste-' + VERSION + options.lang = 'python' + options.nick = 'Fedora Unity' + elif options.sysinfo: + text = sysinfo(options.debug) +- if SET_DESCRIPTION_IF_EMPTY and not options.desc: +- options.desc = 'fpaste --sysinfo' + elif not args: # read from stdin if no file args supplied + try: + text += sys.stdin.read() + except KeyboardInterrupt: + print >> sys.stderr, "\nUSAGE REMINDER:\n fpaste waits for input when run without file arguments.\n Paste your text, then press on a new line to upload.\n Try `fpaste --help' for more information.\nExiting..." + sys.exit(1) +- if SET_DESCRIPTION_IF_EMPTY and not options.desc: +- options.desc = summarize_text(text) + else: +- if not options.desc: +- options.desc = '%s' % (' + '.join(fileargs)) +- else: +- options.desc = '%s: %s' % (options.desc, ' + '.join(fileargs)) + for i, f in enumerate(args): + if not os.access(f, os.R_OK): + parser.error("file '%s' is not readable" % f) +@@ -591,10 +577,8 @@ + text += '### file %d of %d: %s\n' % (i+1, len(args), fileargs[i]) + text += '#' * 78 + '\n' + text += open(f).read() +- + if options.debug: + print 'nick: "%s"' % options.nick +- print 'desc: "%s"' % options.desc + print 'lang: "%s"' % options.lang + print 'text (%d): "%s ..."' % (len(text), text[:80]) + diff --git a/0009-fpaste-0.3.7.1-better-check-for-kde-and-plasma.patch b/0009-fpaste-0.3.7.1-better-check-for-kde-and-plasma.patch new file mode 100644 index 0000000..091ef96 --- /dev/null +++ b/0009-fpaste-0.3.7.1-better-check-for-kde-and-plasma.patch @@ -0,0 +1,11 @@ +--- fpaste.orig 2014-01-23 16:14:31.606400916 +1100 ++++ fpaste 2014-01-23 16:15:04.841157892 +1100 +@@ -161,7 +161,7 @@ + cmdlist = [ + ('OS Release', '''lsb_release -ds''', '''cat /etc/*-release | uniq''', 'cat /etc/issue', 'cat /etc/motd'), + ('Kernel', '''uname -r ; cat /proc/cmdline'''), +- ('Desktop(s) Running', '''ps -eo comm= | egrep '(gnome-session|kdeinit|xfce.?-session|fluxbox|blackbox|hackedbox|ratpoison|enlightenment|icewm-session|od-session|wmaker|wmx|openbox-lxde|openbox-gnome-session|openbox-kde-session|mwm|e16|fvwm|xmonad|sugar-session)' '''), ++ ('Desktop(s) Running', '''ps -eo comm= | egrep '(gnome-session|startkde|startactive|xfce.?-session|fluxbox|blackbox|hackedbox|ratpoison|enlightenment|icewm-session|od-session|wmaker|wmx|openbox-lxde|openbox-gnome-session|openbox-kde-session|mwm|e16|fvwm|xmonad|sugar-session)' '''), + ('Desktop(s) Installed', '''ls -m /usr/share/xsessions/ | sed 's/\.desktop//g' '''), + ('SELinux Status', '''sestatus''', '''/usr/sbin/sestatus''', '''getenforce''', '''grep -v '^#' /etc/sysconfig/selinux'''), + ('SELinux Error Count', '''selinuxenabled && (grep avc: /var/log/messages; ausearch -m avc -ts today)2>/dev/null|egrep -o "comm=\\"[^ ]+"|sort|uniq -c|sort -rn'''), diff --git a/0010-fpaste-0.3.7.1-correct-paste-error-return.patch b/0010-fpaste-0.3.7.1-correct-paste-error-return.patch new file mode 100644 index 0000000..e477607 --- /dev/null +++ b/0010-fpaste-0.3.7.1-correct-paste-error-return.patch @@ -0,0 +1,29 @@ +--- fpaste.orig 2014-01-23 16:22:05.048073376 +1100 ++++ fpaste 2014-01-23 16:26:21.389182939 +1100 +@@ -82,7 +82,7 @@ + import re + if not text: + print >> sys.stderr, "No text to send." +- return False ++ return [False,False] + + # if sent data exceeds maxlength, server dies without error returned, so, we'll truncate the input here, + # until the server decides to truncate instead of die +@@ -101,7 +101,7 @@ + if not is_text(text): + print >> sys.stderr, "WARNING: your paste looks a lot like binary data instead of text." + if not confirm("Send binary data anyway?"): +- return False ++ return [False,False] + + req = urllib2.Request(url=options.url, data=params, headers={'User-agent': USER_AGENT}) + if options.proxy: +@@ -120,7 +120,7 @@ + print >> sys.stderr, "Server Error: %d - %s" % (e.code, e.msg) + if options.debug: + print f.read() +- return False ++ return [False, False] + + # response = f.read() + response = json.loads(f.read()) diff --git a/0011-fpaste-0.3.7.1-reactivate-nick-password-options.patch b/0011-fpaste-0.3.7.1-reactivate-nick-password-options.patch new file mode 100644 index 0000000..2505c3d --- /dev/null +++ b/0011-fpaste-0.3.7.1-reactivate-nick-password-options.patch @@ -0,0 +1,99 @@ +--- fpaste.orig 2014-01-23 16:32:30.722416350 +1100 ++++ fpaste 2014-01-23 17:20:19.905213882 +1100 +@@ -64,9 +64,16 @@ + else: + return False + +-def get_shortened_url(long_url): ++def get_shortened_url(long_url, password): + """Get shortened URL from paste data""" +- req = urllib2.Request(url=long_url+'/', data='mode=json') ++ ++ # NOTE: this uses password, not paste_password ++ if password: ++ params = urllib.urlencode({'mode':'json', 'password': password}) ++ else: ++ params = 'mode=json' ++ ++ req = urllib2.Request(url=long_url+'/', data=params) + try: + f = urllib2.urlopen(req) + except urllib2.URLError: +@@ -87,12 +94,15 @@ + # if sent data exceeds maxlength, server dies without error returned, so, we'll truncate the input here, + # until the server decides to truncate instead of die + author = options.nick +- if len(title) > 120: # limits from maxlength attr of fpaste.org form +- title = title[0:120-3] + "..." +- if len(author) > 30: +- author = author[0:30-3] + "..." ++ if len(author) > 50: ++ author = author[0:50-3] + "..." + +- params = urllib.urlencode({'paste_lang': options.lang, 'paste_data': text, 'paste_private': options.make_private, 'paste_expire': options.expires, 'api_submit': 'true', 'mode': 'json'}) ++ params = urllib.urlencode({'paste_lang': options.lang, 'paste_data': text, ++ 'paste_private': options.make_private, ++ 'paste_expire': options.expires, ++ 'paste_password': options.password, ++ 'paste_user': author, ++ 'api_submit': 'true', 'mode': 'json'}) + pasteSizeKiB = len(params)/1024.0 + + if pasteSizeKiB >= 512: # 512KiB appears to be the current hard limit (20110404); old limit was 16MiB +@@ -133,11 +143,11 @@ + else: + url = "{0}{1}".format(options.url, id) + +- short_url = get_shortened_url(url) ++ short_url = get_shortened_url(url, options.password) + if short_url: + return [url, short_url] + else: +- return [url, url] ++ return [url, False] + + # url = f.geturl() + # if re.match(FPASTE_URL + '?.+', url): +@@ -481,12 +491,12 @@ + + # pastebin-specific options first + fpasteOrg_group = OptionGroup(parser, "fpaste.org Options") +- fpasteOrg_group.add_option('-n', dest='nick', help='your nickname; default is "%default"', metavar='"NICKNAME"') ++ fpasteOrg_group.add_option('-n', dest='nick', help='your nickname; default is "%default";', metavar='"NICKNAME"') + fpasteOrg_group.add_option('-l', dest='lang', help='language of content for syntax highlighting; default is "%default"; use "list" to show all ' + str(len(validSyntaxOpts)) + ' supported langs', metavar='"LANGUAGE"') + fpasteOrg_group.add_option('-x', dest='expires', help='time before paste is removed; default is %default seconds; valid options: ' + ', '.join(validExpiresOpts), metavar='EXPIRES') +- #fpasteOrg_group.add_option('-P', dest='paste_private', help='make paste private; default is %default', + ', '.join(validPrivateOpts), metavar='"PRIVATE"') + fpasteOrg_group.add_option('-P', '--private', help='make paste private; default is %default; valid options: ' + ', '.join(validPrivateOpts), dest='make_private', metavar='"PRIVATE"') + fpasteOrg_group.add_option('-U', '--URL', help='URL of fpaste server; default is %default', dest='url', metavar='"FPASTE URL"') ++ fpasteOrg_group.add_option('-d', '--password', help='password for paste; default is %default', dest='password', metavar='"PASSWORD"') + + parser.add_option_group(fpasteOrg_group) + # other options +@@ -501,8 +511,15 @@ + fpasteProg_group.add_option('', '--confirm', dest='confirm', help='print paste, and prompt for confirmation before sending', action="store_true", default=False) + parser.add_option_group(fpasteProg_group) + +- parser.set_defaults(nick='', lang='text', make_private='yes', +- expires='2592000', selection='primary', url=FPASTE_URL ) ++# Let default be anonymous. ++# p = subprocess.Popen('whoami', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) ++# (out, err) = p.communicate () ++# if p.returncode == 0 and out: ++# user = out[0:-1] ++# else: ++# print >> sys.stderr, "WARNING Could not run whoami. Posting anonymously." ++ ++ parser.set_defaults(nick='', lang='text', make_private='yes', expires='2592000', selection='primary', password='', url=FPASTE_URL ) + (options, args) = parser.parse_args() + + # Check for trailing slash +@@ -610,7 +627,8 @@ + #parser.error("'xsel' failure. this usually means you're not running X") + print >> sys.stderr, "WARNING: URL not saved to clipboard" + +- if url == short_url: ++ if not short_url: ++ print >> sys.stderr, "WARNING: Could not shorten URL" + print url + else: + print short_url + " -> " + url diff --git a/fpaste.spec b/fpaste.spec index bb24fdc..b09a815 100644 --- a/fpaste.spec +++ b/fpaste.spec @@ -1,6 +1,6 @@ Name: fpaste Version: 0.3.7.1 -Release: 9%{?dist} +Release: 10%{?dist} Summary: A simple tool for pasting info onto sticky notes instances BuildArch: noarch Group: Applications/Internet @@ -28,6 +28,25 @@ Patch3: 0004-%{name}-0.3.7.1-add-url-option.patch # Checks fpaste server instance url for trailing slash Patch4: 0005-%{name}-0.3.7.1-enable-shortened-urls.patch +# Updates the language list to match what sticky server supports +Patch5: 0006-%{name}-0.3.7.1-correct-syntax-options.patch + +# Updates the expiry options to match sticky server, sets default to 30 days +# also +Patch6: 0007-%{name}-0.3.7.1-correct-expire-options.patch + +# Remove description option since sticky notes does not support it +Patch7: 0008-%{name}-0.3.7.1-remove-description-option.patch + +# Better kde/plasma detection +Patch8: 0009-%{name}-0.3.7.1-better-check-for-kde-and-plasma.patch + +# Correct the return value for empty or errored inputs +Patch9: 0010-%{name}-0.3.7.1-correct-paste-error-return.patch + +# Reactivate the nick and password options +Patch10: 0011-%{name}-0.3.7.1-reactivate-nick-password-options.patch + %description It is often useful to be able to easily paste text to the Fedora Pastebin at http://paste.fedoraproject.org and this simple script @@ -45,6 +64,12 @@ reason they may be unable to paste something into the pastebin %patch2 %patch3 -p1 %patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch9 +%patch10 %build #nothing required @@ -64,6 +89,15 @@ rm -rf %{buildroot} %{_mandir}/man1/fpaste.1.gz %changelog +* Thu Jan 23 2014 Ankur Sinha 0.3.7.1-10 +- new patches +- correct syntax options +- correct expiry options +- remove description option +- better kde/plasma detection +- Correct return code of paste method +- Enable nick and password options + * Sat Aug 03 2013 Fedora Release Engineering - 0.3.7.1-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild