[fpaste] - Patching
Ankur Sinha
ankursinha at fedoraproject.org
Wed Apr 17 10:02:49 UTC 2013
commit a3d4c650035db29f379656fc8c47a876b5870bac
Author: Ankur Sinha (Ankur Sinha Gmail) <sanjay.ankur at gmail.com>
Date: Wed Apr 17 20:02:11 2013 +1000
- Patching
Clean up patches
Add a patch for url shortener
Add patch for url option
... => 0001-fpaste-0.3.7.1-fedora-production.patch | 0
... => 0002-fpaste-0.3.7.1-remove-smolt-code.patch | 0
...pire-option-add-private-option-default-on.patch | 52 ++++++++++++++++
0004-fpaste-0.3.7.1-add-url-option.patch | 40 ++++++++++++
...nable-shortened-urls-check-trailing-slash.patch | 65 ++++++++++++++++++++
fpaste-default-private-and-use-expire-option.patch | 22 -------
fpaste.spec | 37 +++++++++---
7 files changed, 185 insertions(+), 31 deletions(-)
---
diff --git a/fpaste-0.3.7.1-fedora-production.patch b/0001-fpaste-0.3.7.1-fedora-production.patch
similarity index 100%
rename from fpaste-0.3.7.1-fedora-production.patch
rename to 0001-fpaste-0.3.7.1-fedora-production.patch
diff --git a/fpaste-0.3.7.1-remove-smolt-code.patch b/0002-fpaste-0.3.7.1-remove-smolt-code.patch
similarity index 100%
rename from fpaste-0.3.7.1-remove-smolt-code.patch
rename to 0002-fpaste-0.3.7.1-remove-smolt-code.patch
diff --git a/0003-fpaste-0.3.7.1-use-expire-option-add-private-option-default-on.patch b/0003-fpaste-0.3.7.1-use-expire-option-add-private-option-default-on.patch
new file mode 100644
index 0000000..e205e91
--- /dev/null
+++ b/0003-fpaste-0.3.7.1-use-expire-option-add-private-option-default-on.patch
@@ -0,0 +1,52 @@
+--- ../fpaste-0.3.7.1.orig/fpaste 2013-04-14 12:57:06.052643012 +1000
++++ fpaste 2013-04-14 12:56:14.278796939 +1000
+@@ -81,7 +81,7 @@
+ if len(author) > 30:
+ author = author[0:30-3] + "..."
+
+- params = urllib.urlencode({'paste_lang': options.lang, 'paste_data': text, 'api_submit': 'true', 'mode': 'json'})
++ params = urllib.urlencode({'paste_lang': options.lang, 'paste_data': text, 'paste_private': options.make_private, 'paste_expire': options.expires, '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
+@@ -116,8 +116,11 @@
+ id = [i[1]["id"] for i in response.iteritems()].pop()
+ # for k,j in i.iteritems():
+ # print j, k
+-
+- url = "{0}{1}".format(FPASTE_URL, id)
++ if options.make_private == 'yes':
++ private_hash = [i[1]["hash"] for i in response.iteritems()].pop()
++ url = "{0}{1}/{2}".format(FPASTE_URL, id, private_hash)
++ else:
++ url = "{0}{1}".format(FPASTE_URL, id)
+ return url
+
+ # url = f.geturl()
+@@ -242,6 +245,7 @@
+ 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' ]
+ 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' }
+
+ usage = """\
+@@ -265,6 +269,9 @@
+ 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"')
++ fpasteOrg_group.add_option('-P', '--private', help='make paste private; default is %default; valid options: ' + ', '.join(validPrivateOpts), dest='make_private', metavar='"PRIVATE"')
++
+ parser.add_option_group(fpasteOrg_group)
+ # other options
+ fpasteProg_group = OptionGroup(parser, "Input/Output Options")
+@@ -278,7 +285,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', expires=max(validExpiresOpts), selection='primary')
++ parser.set_defaults(desc='', nick='', lang='text', make_private='yes', expires=max(validExpiresOpts), selection='primary' )
+ (options, args) = parser.parse_args()
+
+ if options.lang.lower() == 'list':
diff --git a/0004-fpaste-0.3.7.1-add-url-option.patch b/0004-fpaste-0.3.7.1-add-url-option.patch
new file mode 100644
index 0000000..14f1cb1
--- /dev/null
+++ b/0004-fpaste-0.3.7.1-add-url-option.patch
@@ -0,0 +1,40 @@
+--- ./fpaste 2013-04-17 19:02:14.915972424 +1000
++++ ../fpaste-0.3.7.1/fpaste 2013-04-17 19:01:10.061175136 +1000
+@@ -92,7 +92,7 @@
+ if not confirm("Send binary data anyway?"):
+ return False
+
+- req = urllib2.Request(url=FPASTE_URL, data=params, headers={'User-agent': USER_AGENT})
++ req = urllib2.Request(url=options.url, data=params, headers={'User-agent': USER_AGENT})
+ if options.proxy:
+ if options.debug:
+ print >> sys.stderr, "Using proxy: %s" % options.proxy
+@@ -118,9 +118,9 @@
+ # print j, k
+ if options.make_private == 'yes':
+ private_hash = [i[1]["hash"] for i in response.iteritems()].pop()
+- url = "{0}{1}/{2}".format(FPASTE_URL, id, private_hash)
++ url = "{0}{1}/{2}".format(options.url, id, private_hash)
+ else:
+- url = "{0}{1}".format(FPASTE_URL, id)
++ url = "{0}{1}".format(options.url, id)
+ return url
+
+ # url = f.geturl()
+@@ -271,6 +271,7 @@
+ 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"')
+
+ parser.add_option_group(fpasteOrg_group)
+ # other options
+@@ -285,7 +286,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', expires=max(validExpiresOpts), selection='primary' )
++ parser.set_defaults(desc='', nick='', lang='text', make_private='yes', expires=max(validExpiresOpts), selection='primary', url=FPASTE_URL )
+ (options, args) = parser.parse_args()
+
+ if options.lang.lower() == 'list':
diff --git a/0005-fpaste-0.3.7.1-enable-shortened-urls-check-trailing-slash.patch b/0005-fpaste-0.3.7.1-enable-shortened-urls-check-trailing-slash.patch
new file mode 100644
index 0000000..1917aec
--- /dev/null
+++ b/0005-fpaste-0.3.7.1-enable-shortened-urls-check-trailing-slash.patch
@@ -0,0 +1,65 @@
+--- fpaste 2013-04-17 19:22:04.312067171 +1000
++++ ../fpaste-0.3.7.1/fpaste 2013-04-17 19:24:28.307540642 +1000
+@@ -64,6 +64,15 @@
+ else:
+ return False
+
++def get_shortened_url(long_url):
++ """Get shortened URL from paste data"""
++ req = urllib2.Request(url=long_url+'/', data='mode=json')
++ try:
++ f = urllib2.urlopen(req)
++ except urllib2.URLError:
++ return False
++
++ return json.loads(f.read().replace('\n',''))['result']['short_url']
+
+ def paste(text, options):
+ '''send text to fpaste.org and return the URL'''
+@@ -121,7 +130,12 @@
+ url = "{0}{1}/{2}".format(options.url, id, private_hash)
+ else:
+ url = "{0}{1}".format(options.url, id)
+- return url
++
++ short_url = get_shortened_url(url)
++ if short_url:
++ return [url, short_url]
++ else:
++ return [url, url]
+
+ # url = f.geturl()
+ # if re.match(FPASTE_URL + '?.+', url):
+@@ -289,6 +303,10 @@
+ parser.set_defaults(desc='', nick='', lang='text', make_private='yes', expires=max(validExpiresOpts), selection='primary', url=FPASTE_URL )
+ (options, args) = parser.parse_args()
+
++ # Check for trailing slash
++ if options.url[-1] != '/':
++ options.url = options.url + '/'
++
+ if options.lang.lower() == 'list':
+ print 'Valid language syntax options:'
+ for opt in validSyntaxOpts:
+@@ -390,7 +408,7 @@
+ if not confirm("OK to send?"):
+ sys.exit(1)
+
+- url = paste(text, options)
++ [url, short_url] = paste(text, options)
+ if url:
+ # try to save URL in clipboard, and warn but don't error
+ if options.clipout:
+@@ -404,7 +422,11 @@
+ #parser.error("'xsel' failure. this usually means you're not running X")
+ print >> sys.stderr, "WARNING: URL not saved to clipboard"
+
+- print url
++ if url == short_url:
++ print url
++ else:
++ print short_url + " -> " + url
++
+ else:
+ sys.exit(1)
+
diff --git a/fpaste.spec b/fpaste.spec
index 5217da7..ac31fb5 100644
--- a/fpaste.spec
+++ b/fpaste.spec
@@ -1,6 +1,6 @@
Name: fpaste
Version: 0.3.7.1
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: A simple tool for pasting info onto fpaste.org
BuildArch: noarch
Group: Applications/Internet
@@ -11,21 +11,30 @@ Source0: https://fedorahosted.org/released/fpaste/fpaste-%{version}.tar.bz2
# Point fpaste to fedora sticky notes staging instance
# Thanks Clint for the patch.
# https://fedorahosted.org/fpaste/ticket/7#comment:1
-Patch0: %{name}-0.3.7.1-fedora-production.patch
+Patch0: 0001-%{name}-0.3.7.1-fedora-production.patch
# Remove smolt data from fpaste
# https://fedorahosted.org/fpaste/ticket/6
-Patch1: %{name}-0.3.7.1-remove-smolt-code.patch
+Patch1: 0002-%{name}-0.3.7.1-remove-smolt-code.patch
-Patch2: %{name}-default-private-and-use-expire-option.patch
+# Adds an option to make paste private or public, sets default to on
+# Makes use of expiry option
+Patch2: 0003-%{name}-0.3.7.1-use-expire-option-add-private-option-default-on.patch
+
+# Enables user to specify another paste bin url
+Patch3: 0004-%{name}-0.3.7.1-add-url-option.patch
+
+# Returns a short url when possible and prints it
+# Checks fpaste server instance url for trailing slash
+Patch4: 0005-%{name}-0.3.7.1-enable-shortened-urls-check-trailing-slash.patch
%description
It is often useful to be able to easily paste text to the Fedora
-Pastebin at http://fpaste.org and this simple script will do that
-and return the resulting URL so that people may examine the
-output. This can hopefully help folks who are for some reason
-stuck without X, working remotely, or any other reason they may
-be unable to paste something into the pastebin
+Pastebin at http://paste.fedoraproject.org and this simple script
+will do that and return the resulting URL so that people may
+examine the output. This can hopefully help folks who are for
+some reason stuck without X, working remotely, or any other
+reason they may be unable to paste something into the pastebin
%prep
%setup -q
@@ -34,6 +43,8 @@ be unable to paste something into the pastebin
%patch0 -p1
%patch1
%patch2
+%patch3 -p1
+%patch4
%build
#nothing required
@@ -53,6 +64,14 @@ rm -rf %{buildroot}
%{_mandir}/man1/fpaste.1.gz
%changelog
+* Wed Apr 17 2013 Ankur Sinha <ankursinha AT fedoraproject DOT org> 0.3.7.1-7
+- Multiple patchs
+- URL shortner
+- Private option
+- Default private on
+- Option to use another pastebin
+- Rectified summary
+
* Fri Mar 01 2013 Athmane Madjoudj <athmane at fedoraproject.org> 0.3.7.1-6
- Add a patch to make private url default and use expire option.
More information about the scm-commits
mailing list