@@ -0,0 +1,24 @@ | |||
# Maintainer: John Jenkins twodopeshaggy@gmail.com | |||
# Contributer: Lauri Niskanen <ape@ape3000.com> | |||
pkgname=python-hidraw-git | |||
pkgver=r4.bbd7855 | |||
pkgrel=1 | |||
pkgdesc="Pythonic bindings for linux's hidraw ioctls" | |||
arch=('any') | |||
url="https://github.com/vpelletier/python-hidraw" | |||
license=('GPL2') | |||
depends=('python-setuptools' 'python-ioctl-opt-git') | |||
makedepends=('git') | |||
source=("$pkgname::git+https://github.com/vpelletier/python-hidraw.git") | |||
sha256sums=('SKIP') | |||
pkgver() { | |||
cd "${srcdir}"/${pkgname} | |||
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" | |||
} | |||
package() { | |||
cd "$srcdir/$pkgname" | |||
python setup.py install --root="$pkgdir/" --optimize=1 | |||
} |
@@ -0,0 +1,24 @@ | |||
# Generated by makepkg 4.2.1 | |||
# using fakeroot version 1.20.2 | |||
# Mon Apr 6 10:28:26 UTC 2015 | |||
pkgname = python-hidraw-git | |||
pkgver = r4.bbd7855-1 | |||
pkgdesc = Pythonic bindings for linux's hidraw ioctls | |||
url = https://github.com/vpelletier/python-hidraw | |||
builddate = 1428316106 | |||
packager = Unknown Packager | |||
size = 48128 | |||
arch = any | |||
license = GPL2 | |||
depend = python-setuptools | |||
depend = python-ioctl-opt-git | |||
makedepend = git | |||
makepkgopt = strip | |||
makepkgopt = docs | |||
makepkgopt = !libtool | |||
makepkgopt = !staticlibs | |||
makepkgopt = emptydirs | |||
makepkgopt = zipman | |||
makepkgopt = purge | |||
makepkgopt = !upx | |||
makepkgopt = !debug |
@@ -0,0 +1,124 @@ | |||
import ctypes | |||
import collections | |||
import fcntl | |||
import ioctl_opt | |||
# input.h | |||
BUS_USB = 0x03 | |||
BUS_HIL = 0x04 | |||
BUS_BLUETOOTH = 0x05 | |||
BUS_VIRTUAL = 0x06 | |||
# hid.h | |||
_HID_MAX_DESCRIPTOR_SIZE = 4096 | |||
# hidraw.h | |||
class _hidraw_report_descriptor(ctypes.Structure): | |||
_fields_ = [ | |||
('size', ctypes.c_uint), | |||
('value', ctypes.c_ubyte * _HID_MAX_DESCRIPTOR_SIZE), | |||
] | |||
class _hidraw_devinfo(ctypes.Structure): | |||
_fields_ = [ | |||
('bustype', ctypes.c_uint), | |||
('vendor', ctypes.c_short), | |||
('product', ctypes.c_short), | |||
] | |||
_HIDIOCGRDESCSIZE = ioctl_opt.IOR(ord('H'), 0x01, ctypes.c_int) | |||
_HIDIOCGRDESC = ioctl_opt.IOR(ord('H'), 0x02, _hidraw_report_descriptor) | |||
_HIDIOCGRAWINFO = ioctl_opt.IOR(ord('H'), 0x03, _hidraw_devinfo) | |||
_HIDIOCGRAWNAME = lambda len: ioctl_opt.IOC(ioctl_opt.IOC_READ, ord('H'), | |||
0x04, len) | |||
_HIDIOCGRAWPHYS = lambda len: ioctl_opt.IOC(ioctl_opt.IOC_READ, ord('H'), | |||
0x05, len) | |||
_HIDIOCSFEATURE = lambda len: ioctl_opt.IOC( | |||
ioctl_opt.IOC_WRITE|ioctl_opt.IOC_READ, ord('H'), 0x06, len) | |||
_HIDIOCGFEATURE = lambda len: ioctl_opt.IOC( | |||
ioctl_opt.IOC_WRITE|ioctl_opt.IOC_READ, ord('H'), 0x07, len) | |||
HIDRAW_FIRST_MINOR = 0 | |||
HIDRAW_MAX_DEVICES = 64 | |||
HIDRAW_BUFFER_SIZE = 64 | |||
DevInfo = collections.namedtuple('DevInfo', ['bustype', 'vendor', 'product']) | |||
class HIDRaw(object): | |||
""" | |||
Provides methods to access hidraw device's ioctls. | |||
""" | |||
def __init__(self, device): | |||
""" | |||
device (file, fileno) | |||
A file object or a fileno of an open hidraw device node. | |||
""" | |||
self._device = device | |||
def _ioctl(self, func, arg, mutate_flag=False): | |||
result = fcntl.ioctl(self._device, func, arg, mutate_flag) | |||
if result < 0: | |||
raise IOError(result) | |||
def getRawReportDescriptor(self): | |||
""" | |||
Return a binary string containing the raw HID report descriptor. | |||
""" | |||
descriptor = _hidraw_report_descriptor() | |||
size = ctypes.c_uint() | |||
self._ioctl(_HIDIOCGRDESCSIZE, size, True) | |||
descriptor.size = size | |||
self._ioctl(_HIDIOCGRDESC, descriptor, True) | |||
return ''.join(chr(x) for x in descriptor.value[:size.value]) | |||
# TODO: decode descriptor into a python object | |||
#def getReportDescriptor(self): | |||
def getInfo(self): | |||
""" | |||
Returns a DevInfo instance, a named tuple with the following items: | |||
- bustype: one of BUS_USB, BUS_HIL, BUS_BLUETOOTH or BUS_VIRTUAL | |||
- vendor: device's vendor number | |||
- product: device's product number | |||
""" | |||
devinfo = _hidraw_devinfo() | |||
self._ioctl(_HIDIOCGRAWINFO, devinfo, True) | |||
return DevInfo(devinfo.bustype, devinfo.vendor, devinfo.product) | |||
def getName(self, length=512): | |||
""" | |||
Returns device name as an unicode object. | |||
""" | |||
name = ctypes.create_string_buffer(length) | |||
self._ioctl(_HIDIOCGRAWNAME(length), name, True) | |||
return name.value.decode('UTF-8') | |||
def getPhysicalAddress(self, length=512): | |||
""" | |||
Returns device physical address as a string. | |||
See hidraw documentation for value signification, as it depends on | |||
device's bus type. | |||
""" | |||
name = ctypes.create_string_buffer(length) | |||
self._ioctl(_HIDIOCGRAWPHYS(length), name, True) | |||
return name.value | |||
def sendFeatureReport(self, report, report_num=0): | |||
""" | |||
Send a feature report. | |||
""" | |||
length = len(report) + 1 | |||
buf = ctypes.create_string_buffer(chr(report_num) + report, length) | |||
self._ioctl(_HIDIOCSFEATURE(length), buf, True) | |||
def getFeatureReport(self, report_num=0, length=63): | |||
""" | |||
Receive a feature report. | |||
Blocks, unless you configured provided file (descriptor) to be | |||
non-blocking. | |||
""" | |||
length += 1 | |||
buf = ctypes.create_string_buffer(length) | |||
buf[0] = chr(report_num) | |||
self._ioctl(_HIDIOCGFEATURE(length), buf, True) | |||
return buf.value |
@@ -0,0 +1,14 @@ | |||
Metadata-Version: 1.1 | |||
Name: hidraw-pure | |||
Version: 1.0 | |||
Summary: Pure-python linux hidraw bindings | |||
Home-page: http://github.com/vpelletier/python-hidraw | |||
Author: Vincent Pelletier | |||
Author-email: plr.vincent@gmail.com | |||
License: GPL 2+ | |||
Description: UNKNOWN | |||
Keywords: linux human interface device HID hidraw | |||
Platform: UNKNOWN | |||
Classifier: Intended Audience :: Information Technology | |||
Classifier: License :: OSI Approved :: GNU General Public License (GPL) | |||
Classifier: Operating System :: POSIX :: Linux |
@@ -0,0 +1,8 @@ | |||
README | |||
setup.py | |||
hidraw/__init__.py | |||
hidraw_pure.egg-info/PKG-INFO | |||
hidraw_pure.egg-info/SOURCES.txt | |||
hidraw_pure.egg-info/dependency_links.txt | |||
hidraw_pure.egg-info/requires.txt | |||
hidraw_pure.egg-info/top_level.txt |
@@ -0,0 +1 @@ | |||
ioctl-opt |
@@ -0,0 +1 @@ | |||
hidraw |
@@ -0,0 +1,5 @@ | |||
bbd785593c123a1a8493ceb308e2bf192dbbf3ce not-for-merge branch 'master' of https://github.com/vpelletier/python-hidraw | |||
4811d2f4758c9472e0ce4d2e56ed856866dc7a08 not-for-merge 'refs/pull/1/head' of https://github.com/vpelletier/python-hidraw | |||
cc082d77ae0e28a27ffd6250c406053f0f99a2e7 not-for-merge 'refs/pull/1/merge' of https://github.com/vpelletier/python-hidraw | |||
81a4ebdde2468609da0ada66b121643b7da8d7e7 not-for-merge tag 'v1.0' of https://github.com/vpelletier/python-hidraw | |||
49e86d54bc829548015848401c38bf8f0ebb398d not-for-merge tag 'v1.1' of https://github.com/vpelletier/python-hidraw |
@@ -0,0 +1 @@ | |||
ref: refs/heads/master |
@@ -0,0 +1,8 @@ | |||
[core] | |||
repositoryformatversion = 0 | |||
filemode = true | |||
bare = true | |||
[remote "origin"] | |||
url = https://github.com/vpelletier/python-hidraw.git | |||
fetch = +refs/*:refs/* | |||
mirror = true |
@@ -0,0 +1 @@ | |||
Unnamed repository; edit this file 'description' to name the repository. |
@@ -0,0 +1,15 @@ | |||
#!/bin/sh | |||
# | |||
# An example hook script to check the commit log message taken by | |||
# applypatch from an e-mail message. | |||
# | |||
# The hook should exit with non-zero status after issuing an | |||
# appropriate message if it wants to stop the commit. The hook is | |||
# allowed to edit the commit message file. | |||
# | |||
# To enable this hook, rename this file to "applypatch-msg". | |||
. git-sh-setup | |||
test -x "$GIT_DIR/hooks/commit-msg" && | |||
exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} | |||
: |
@@ -0,0 +1,24 @@ | |||
#!/bin/sh | |||
# | |||
# An example hook script to check the commit log message. | |||
# Called by "git commit" with one argument, the name of the file | |||
# that has the commit message. The hook should exit with non-zero | |||
# status after issuing an appropriate message if it wants to stop the | |||
# commit. The hook is allowed to edit the commit message file. | |||
# | |||
# To enable this hook, rename this file to "commit-msg". | |||
# Uncomment the below to add a Signed-off-by line to the message. | |||
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg | |||
# hook is more suited to it. | |||
# | |||
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') | |||
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" | |||
# This example catches duplicate Signed-off-by lines. | |||
test "" = "$(grep '^Signed-off-by: ' "$1" | | |||
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { | |||
echo >&2 Duplicate Signed-off-by lines. | |||
exit 1 | |||
} |
@@ -0,0 +1,8 @@ | |||
#!/bin/sh | |||
# | |||
# An example hook script to prepare a packed repository for use over | |||
# dumb transports. | |||
# | |||
# To enable this hook, rename this file to "post-update". | |||
exec git update-server-info |
@@ -0,0 +1,14 @@ | |||
#!/bin/sh | |||
# | |||
# An example hook script to verify what is about to be committed | |||
# by applypatch from an e-mail message. | |||
# | |||
# The hook should exit with non-zero status after issuing an | |||
# appropriate message if it wants to stop the commit. | |||
# | |||
# To enable this hook, rename this file to "pre-applypatch". | |||
. git-sh-setup | |||
test -x "$GIT_DIR/hooks/pre-commit" && | |||
exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} | |||
: |
@@ -0,0 +1,49 @@ | |||
#!/bin/sh | |||
# | |||
# An example hook script to verify what is about to be committed. | |||
# Called by "git commit" with no arguments. The hook should | |||
# exit with non-zero status after issuing an appropriate message if | |||
# it wants to stop the commit. | |||
# | |||
# To enable this hook, rename this file to "pre-commit". | |||
if git rev-parse --verify HEAD >/dev/null 2>&1 | |||
then | |||
against=HEAD | |||
else | |||
# Initial commit: diff against an empty tree object | |||
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 | |||
fi | |||
# If you want to allow non-ASCII filenames set this variable to true. | |||
allownonascii=$(git config --bool hooks.allownonascii) | |||
# Redirect output to stderr. | |||
exec 1>&2 | |||
# Cross platform projects tend to avoid non-ASCII filenames; prevent | |||
# them from being added to the repository. We exploit the fact that the | |||
# printable range starts at the space character and ends with tilde. | |||
if [ "$allownonascii" != "true" ] && | |||
# Note that the use of brackets around a tr range is ok here, (it's | |||
# even required, for portability to Solaris 10's /usr/bin/tr), since | |||
# the square bracket bytes happen to fall in the designated range. | |||
test $(git diff --cached --name-only --diff-filter=A -z $against | | |||
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 | |||
then | |||
cat <<\EOF | |||
Error: Attempt to add a non-ASCII file name. | |||
This can cause problems if you want to work with people on other platforms. | |||
To be portable it is advisable to rename the file. | |||
If you know what you are doing you can disable this check using: | |||
git config hooks.allownonascii true | |||
EOF | |||
exit 1 | |||
fi | |||
# If there are whitespace errors, print the offending file names and fail. | |||
exec git diff-index --check --cached $against -- |
@@ -0,0 +1,53 @@ | |||
#!/bin/sh | |||
# An example hook script to verify what is about to be pushed. Called by "git | |||
# push" after it has checked the remote status, but before anything has been | |||
# pushed. If this script exits with a non-zero status nothing will be pushed. | |||
# | |||
# This hook is called with the following parameters: | |||
# | |||
# $1 -- Name of the remote to which the push is being done | |||
# $2 -- URL to which the push is being done | |||
# | |||
# If pushing without using a named remote those arguments will be equal. | |||
# | |||
# Information about the commits which are being pushed is supplied as lines to | |||
# the standard input in the form: | |||
# | |||
# <local ref> <local sha1> <remote ref> <remote sha1> | |||
# | |||
# This sample shows how to prevent push of commits where the log message starts | |||
# with "WIP" (work in progress). | |||
remote="$1" | |||
url="$2" | |||
z40=0000000000000000000000000000000000000000 | |||
while read local_ref local_sha remote_ref remote_sha | |||
do | |||
if [ "$local_sha" = $z40 ] | |||
then | |||
# Handle delete | |||
: | |||
else | |||
if [ "$remote_sha" = $z40 ] | |||
then | |||
# New branch, examine all commits | |||
range="$local_sha" | |||
else | |||
# Update to existing branch, examine new commits | |||
range="$remote_sha..$local_sha" | |||
fi | |||
# Check for WIP commit | |||
commit=`git rev-list -n 1 --grep '^WIP' "$range"` | |||
if [ -n "$commit" ] | |||
then | |||
echo >&2 "Found WIP commit in $local_ref, not pushing" | |||
exit 1 | |||
fi | |||
fi | |||
done | |||
exit 0 |
@@ -0,0 +1,169 @@ | |||
#!/bin/sh | |||
# | |||
# Copyright (c) 2006, 2008 Junio C Hamano | |||
# | |||
# The "pre-rebase" hook is run just before "git rebase" starts doing | |||
# its job, and can prevent the command from running by exiting with | |||
# non-zero status. | |||
# | |||
# The hook is called with the following parameters: | |||
# | |||
# $1 -- the upstream the series was forked from. | |||
# $2 -- the branch being rebased (or empty when rebasing the current branch). | |||
# | |||
# This sample shows how to prevent topic branches that are already | |||
# merged to 'next' branch from getting rebased, because allowing it | |||
# would result in rebasing already published history. | |||
publish=next | |||
basebranch="$1" | |||
if test "$#" = 2 | |||
then | |||
topic="refs/heads/$2" | |||
else | |||
topic=`git symbolic-ref HEAD` || | |||
exit 0 ;# we do not interrupt rebasing detached HEAD | |||
fi | |||
case "$topic" in | |||
refs/heads/??/*) | |||
;; | |||
*) | |||
exit 0 ;# we do not interrupt others. | |||
;; | |||
esac | |||
# Now we are dealing with a topic branch being rebased | |||
# on top of master. Is it OK to rebase it? | |||
# Does the topic really exist? | |||
git show-ref -q "$topic" || { | |||
echo >&2 "No such branch $topic" | |||
exit 1 | |||
} | |||
# Is topic fully merged to master? | |||
not_in_master=`git rev-list --pretty=oneline ^master "$topic"` | |||
if test -z "$not_in_master" | |||
then | |||
echo >&2 "$topic is fully merged to master; better remove it." | |||
exit 1 ;# we could allow it, but there is no point. | |||
fi | |||
# Is topic ever merged to next? If so you should not be rebasing it. | |||
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` | |||
only_next_2=`git rev-list ^master ${publish} | sort` | |||
if test "$only_next_1" = "$only_next_2" | |||
then | |||
not_in_topic=`git rev-list "^$topic" master` | |||
if test -z "$not_in_topic" | |||
then | |||
echo >&2 "$topic is already up-to-date with master" | |||
exit 1 ;# we could allow it, but there is no point. | |||
else | |||
exit 0 | |||
fi | |||
else | |||
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` | |||
/usr/bin/perl -e ' | |||
my $topic = $ARGV[0]; | |||
my $msg = "* $topic has commits already merged to public branch:\n"; | |||
my (%not_in_next) = map { | |||
/^([0-9a-f]+) /; | |||
($1 => 1); | |||
} split(/\n/, $ARGV[1]); | |||
for my $elem (map { | |||
/^([0-9a-f]+) (.*)$/; | |||
[$1 => $2]; | |||
} split(/\n/, $ARGV[2])) { | |||
if (!exists $not_in_next{$elem->[0]}) { | |||
if ($msg) { | |||
print STDERR $msg; | |||
undef $msg; | |||
} | |||
print STDERR " $elem->[1]\n"; | |||
} | |||
} | |||
' "$topic" "$not_in_next" "$not_in_master" | |||
exit 1 | |||
fi | |||
exit 0 | |||
################################################################ | |||
This sample hook safeguards topic branches that have been | |||
published from being rewound. | |||
The workflow assumed here is: | |||
* Once a topic branch forks from "master", "master" is never | |||
merged into it again (either directly or indirectly). | |||
* Once a topic branch is fully cooked and merged into "master", | |||
it is deleted. If you need to build on top of it to correct | |||
earlier mistakes, a new topic branch is created by forking at | |||
the tip of the "master". This is not strictly necessary, but | |||
it makes it easier to keep your history simple. | |||
* Whenever you need to test or publish your changes to topic | |||
branches, merge them into "next" branch. | |||
The script, being an example, hardcodes the publish branch name | |||
to be "next", but it is trivial to make it configurable via | |||
$GIT_DIR/config mechanism. | |||
With this workflow, you would want to know: | |||
(1) ... if a topic branch has ever been merged to "next". Young | |||
topic branches can have stupid mistakes you would rather | |||
clean up before publishing, and things that have not been | |||
merged into other branches can be easily rebased without | |||
affecting other people. But once it is published, you would | |||
not want to rewind it. | |||
(2) ... if a topic branch has been fully merged to "master". | |||
Then you can delete it. More importantly, you should not | |||
build on top of it -- other people may already want to | |||
change things related to the topic as patches against your | |||
"master", so if you need further changes, it is better to | |||
fork the topic (perhaps with the same name) afresh from the | |||
tip of "master". | |||
Let's look at this example: | |||
o---o---o---o---o---o---o---o---o---o "next" | |||
/ / / / | |||
/ a---a---b A / / | |||
/ / / / | |||
/ / c---c---c---c B / | |||
/ / / \ / | |||
/ / / b---b C \ / | |||
/ / / / \ / | |||
---o---o---o---o---o---o---o---o---o---o---o "master" | |||
A, B and C are topic branches. | |||
* A has one fix since it was merged up to "next". | |||
* B has finished. It has been fully merged up to "master" and "next", | |||
and is ready to be deleted. | |||
* C has not merged to "next" at all. | |||
We would want to allow C to be rebased, refuse A, and encourage | |||
B to be deleted. | |||
To compute (1): | |||
git rev-list ^master ^topic next | |||
git rev-list ^master next | |||
if these match, topic has not merged in next at all. | |||
To compute (2): | |||
git rev-list master..topic | |||
if this is empty, it is fully merged to "master". |
@@ -0,0 +1,36 @@ | |||
#!/bin/sh | |||
# | |||
# An example hook script to prepare the commit log message. | |||
# Called by "git commit" with the name of the file that has the | |||
# commit message, followed by the description of the commit | |||
# message's source. The hook's purpose is to edit the commit | |||
# message file. If the hook fails with a non-zero status, | |||
# the commit is aborted. | |||
# | |||
# To enable this hook, rename this file to "prepare-commit-msg". | |||
# This hook includes three examples. The first comments out the | |||
# "Conflicts:" part of a merge commit. | |||
# | |||
# The second includes the output of "git diff --name-status -r" | |||
# into the message, just before the "git status" output. It is | |||
# commented because it doesn't cope with --amend or with squashed | |||
# commits. | |||
# | |||
# The third example adds a Signed-off-by line to the message, that can | |||
# still be edited. This is rarely a good idea. | |||
case "$2,$3" in | |||
merge,) | |||
/usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; | |||
# ,|template,) | |||
# /usr/bin/perl -i.bak -pe ' | |||
# print "\n" . `git diff --cached --name-status -r` | |||
# if /^#/ && $first++ == 0' "$1" ;; | |||
*) ;; | |||
esac | |||
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') | |||
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" |
@@ -0,0 +1,128 @@ | |||
#!/bin/sh | |||
# | |||
# An example hook script to blocks unannotated tags from entering. | |||
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new | |||
# | |||
# To enable this hook, rename this file to "update". | |||
# | |||
# Config | |||
# ------ | |||
# hooks.allowunannotated | |||
# This boolean sets whether unannotated tags will be allowed into the | |||
# repository. By default they won't be. | |||
# hooks.allowdeletetag | |||
# This boolean sets whether deleting tags will be allowed in the | |||
# repository. By default they won't be. | |||
# hooks.allowmodifytag | |||
# This boolean sets whether a tag may be modified after creation. By default | |||
# it won't be. | |||
# hooks.allowdeletebranch | |||
# This boolean sets whether deleting branches will be allowed in the | |||
# repository. By default they won't be. | |||
# hooks.denycreatebranch | |||
# This boolean sets whether remotely creating branches will be denied | |||
# in the repository. By default this is allowed. | |||
# | |||
# --- Command line | |||
refname="$1" | |||
oldrev="$2" | |||
newrev="$3" | |||
# --- Safety check | |||
if [ -z "$GIT_DIR" ]; then | |||
echo "Don't run this script from the command line." >&2 | |||
echo " (if you want, you could supply GIT_DIR then run" >&2 | |||
echo " $0 <ref> <oldrev> <newrev>)" >&2 | |||
exit 1 | |||
fi | |||
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then | |||
echo "usage: $0 <ref> <oldrev> <newrev>" >&2 | |||
exit 1 | |||
fi | |||
# --- Config | |||
allowunannotated=$(git config --bool hooks.allowunannotated) | |||
allowdeletebranch=$(git config --bool hooks.allowdeletebranch) | |||
denycreatebranch=$(git config --bool hooks.denycreatebranch) | |||
allowdeletetag=$(git config --bool hooks.allowdeletetag) | |||
allowmodifytag=$(git config --bool hooks.allowmodifytag) | |||
# check for no description | |||
projectdesc=$(sed -e '1q' "$GIT_DIR/description") | |||
case "$projectdesc" in | |||
"Unnamed repository"* | "") | |||
echo "*** Project description file hasn't been set" >&2 | |||
exit 1 | |||
;; | |||
esac | |||
# --- Check types | |||
# if $newrev is 0000...0000, it's a commit to delete a ref. | |||
zero="0000000000000000000000000000000000000000" | |||
if [ "$newrev" = "$zero" ]; then | |||
newrev_type=delete | |||
else | |||
newrev_type=$(git cat-file -t $newrev) | |||
fi | |||
case "$refname","$newrev_type" in | |||
refs/tags/*,commit) | |||
# un-annotated tag | |||
short_refname=${refname##refs/tags/} | |||
if [ "$allowunannotated" != "true" ]; then | |||
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 | |||
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 | |||
exit 1 | |||
fi | |||
;; | |||
refs/tags/*,delete) | |||
# delete tag | |||
if [ "$allowdeletetag" != "true" ]; then | |||
echo "*** Deleting a tag is not allowed in this repository" >&2 | |||
exit 1 | |||
fi | |||
;; | |||
refs/tags/*,tag) | |||
# annotated tag | |||
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 | |||
then | |||
echo "*** Tag '$refname' already exists." >&2 | |||
echo "*** Modifying a tag is not allowed in this repository." >&2 | |||
exit 1 | |||
fi | |||
;; | |||
refs/heads/*,commit) | |||
# branch | |||
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then | |||
echo "*** Creating a branch is not allowed in this repository" >&2 | |||
exit 1 | |||
fi | |||
;; | |||
refs/heads/*,delete) | |||
# delete branch | |||
if [ "$allowdeletebranch" != "true" ]; then | |||
echo "*** Deleting a branch is not allowed in this repository" >&2 | |||
exit 1 | |||
fi | |||
;; | |||
refs/remotes/*,commit) | |||
# tracking branch | |||
;; | |||
refs/remotes/*,delete) | |||
# delete tracking branch | |||
if [ "$allowdeletebranch" != "true" ]; then | |||
echo "*** Deleting a tracking branch is not allowed in this repository" >&2 | |||
exit 1 | |||
fi | |||
;; | |||
*) | |||
# Anything else (is there anything else?) | |||
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 | |||
exit 1 | |||
;; | |||
esac | |||
# --- Finished | |||
exit 0 |
@@ -0,0 +1,6 @@ | |||
# git ls-files --others --exclude-from=.git/info/exclude | |||
# Lines that start with '#' are comments. | |||
# For a project mostly in C, the following would be a good set of | |||
# exclude patterns (uncomment them if you want to use them): | |||
# *.[oa] | |||
# *~ |
@@ -0,0 +1,3 @@ | |||
x�ŽAJ1D]ç}?é$$ù "¸r夓îù’É0Ó‚ÞÞÁ�+7nŠGQUT�c4wÅ;ÝE€Ç,ÎÛP�%ëâ± §Å' µ¦’\ag6ÚeUÈHA | |||
³¸s´W&KL1tƒ/‰)s’dèCß烅º¬•vxøå§Û Ö/uŽG@Ÿ·x | |||
ÜŸ`ÍéžUþU6KûýÚæm…6«ö·¹éååõ*õ~3Úq´õ<õ¯üì|ø_û |
@@ -0,0 +1,2 @@ | |||
x¥ŽAjÃ0E³Ö)f0#É’ÇPJÉ ºÊ^#��eUÉù«Ð#t÷yð?¥äf¤K«"@ÞëH‹±Ì()޼Æ)MˆK2nJ>„@ìH�¡ÊÞ€y™È¹ÙFmlÐ�Æ>…-’Nz6sêD…g{îy�oï[¶MZ– | |||
çV‡×þZKÈÛ�ò ÚZôÚÍpEƒ¨:íW[WþQ·g9AÖ^Rò±ê´oPÌ |
@@ -0,0 +1,2 @@ | |||
x¥�ÍJ1„=ÏS4xÞµó3IDODO^¥“îÙ d&c6+úöŽˆOàõ£ê+*ÕyÎÌx¸êM� | |||
¢ Ú¤‘Хɨ¨ØOÆ‹MÑ2E¯#ëa¥&K‡ ÈJdm]px`Bbr.*œ5Ñ3öâÿò6(Åz²~é`½LbYËè„ø)'OºôSmðš—ô³ó"¥HÏÒàv-mÿñ‹ï�3å²Ou¾eƒEØ¡G6º]ë[å’áIÚQ`½”MÞ/rîp`ju†™…Š,‰ÚÍJ=�vj¦ü)ýkgÈäšzy«kß?>?@¢RÎ߀UtF |
@@ -0,0 +1,2 @@ | |||
xťPAj1ëy^‘´Ř‰{ˇ”ý@áÄžíŔf¦„ô˙;—ŇëŇ›’�ÔŽŢ·RÎ/s¸�„â1µ | |||
Ą +݉ťZ%ÓʱZ\ľuř>� ’W3ŹT¤ŔĹÔ´”ŠĄĘ¦běü«'A´¸giâčĐś,z.n’Ď�bŤdŃźůuŚĐÍőî{ÓŢ˙đőÖu»żµŁL P„W`€ĺdĎIÓ˙e^>}Ü<<[3lű<ž?á®k« |
@@ -0,0 +1,6 @@ | |||
# pack-refs with: peeled fully-peeled | |||
bbd785593c123a1a8493ceb308e2bf192dbbf3ce refs/heads/master | |||
4811d2f4758c9472e0ce4d2e56ed856866dc7a08 refs/pull/1/head | |||
cc082d77ae0e28a27ffd6250c406053f0f99a2e7 refs/pull/1/merge | |||
81a4ebdde2468609da0ada66b121643b7da8d7e7 refs/tags/v1.0 | |||
49e86d54bc829548015848401c38bf8f0ebb398d refs/tags/v1.1 |
@@ -1,12 +1,13 @@ | |||
# Maintainer: John Jenkins twodopeshaggy@gmail.com | |||
pkgname=rtv-git | |||
pkgver=r273.6036d90 | |||
pkgver=r290.ecbc624 | |||
pkgrel=1 | |||
pkgdesc="Browse Reddit from your terminal" | |||
arch=('any') | |||
url="https://github.com/michael-lazar/rtv" | |||
license=('MIT') | |||
makedepends=('git' | |||
depends=('ncurses' 'python' 'python-six' 'python-requests' 'python-praw' 'python-setuptools') | |||
source=('git+https://github.com/michael-lazar/rtv.git') | |||
sha256sums=('SKIP') |
@@ -1,21 +1,15 @@ | |||
# Generated by makepkg 4.2.1 | |||
# using fakeroot version 1.20.2 | |||
# Mon Apr 6 03:01:16 UTC 2015 | |||
# Mon Apr 6 10:19:02 UTC 2015 | |||
pkgname = rtv-git | |||
pkgver = r273.6036d90-1 | |||
pkgver = r290.ecbc624-1 | |||
pkgdesc = Browse Reddit from your terminal | |||
url = https://github.com/michael-lazar/rtv | |||
builddate = 1428289276 | |||
builddate = 1428315542 | |||
packager = Unknown Packager | |||
size = 230400 | |||
size = 231424 | |||
arch = any | |||
license = MIT | |||
depend = ncurses | |||
depend = python | |||
depend = python-six | |||
depend = python-requests | |||
depend = python-praw | |||
depend = python-setuptools | |||
makepkgopt = strip | |||
makepkgopt = docs | |||
makepkgopt = !libtool |
@@ -1,10 +1,10 @@ | |||
#!/bin/python | |||
# EASY-INSTALL-ENTRY-SCRIPT: 'rtv==1.2','console_scripts','rtv' | |||
__requires__ = 'rtv==1.2' | |||
# EASY-INSTALL-ENTRY-SCRIPT: 'rtv==1.2.1','console_scripts','rtv' | |||
__requires__ = 'rtv==1.2.1' | |||
import sys | |||
from pkg_resources import load_entry_point | |||
if __name__ == '__main__': | |||
sys.exit( | |||
load_entry_point('rtv==1.2', 'console_scripts', 'rtv')() | |||
load_entry_point('rtv==1.2.1', 'console_scripts', 'rtv')() | |||
) |
@@ -1,40 +1,38 @@ | |||
Metadata-Version: 1.1 | |||
Name: rtv | |||
Version: 1.2 | |||
Version: 1.2.1 | |||
Summary: A simple terminal viewer for Reddit (Reddit Terminal Viewer) | |||
Home-page: https://github.com/michael-lazar/rtv | |||
Author: Michael Lazar | |||
Author-email: lazar.michael22@gmail.com | |||
License: MIT | |||
Description: .. image:: https://pypip.in/version/rtv/badge.svg?text=version&style=flat | |||
:target: https://pypi.python.org/pypi/rtv/ | |||
:alt: Latest Version | |||
.. image:: https://pypip.in/py_versions/rtv/badge.svg?style=flat | |||
:target: https://pypi.python.org/pypi/rtv/ | |||
:alt: Supported Python versions | |||
Description: | |||
=========================== | |||
RTV: Reddit Terminal Viewer | |||
=========================== | |||
====================== | |||
Reddit Terminal Viewer | |||
====================== | |||
Browse Reddit from your terminal | |||
RTV is an application that allows you to view and interact with reddit from your terminal. It is compatible with *most* terminal emulators on Linux and OSX. | |||
.. image:: http://i.imgur.com/W1hxqCt.png | |||
RTV is built in **python** using the **curses** library, and is compatible with *most* terminal emulators on Linux and OS X. | |||
RTV is built in **python** using the **curses** library. | |||
--------------- | |||
------------- | |||
Update (v1.1) | |||
------------- | |||
|pypi| |python| |downloads| | |||
Users can now post comments! | |||
--------------- | |||
.. image:: http://i.imgur.com/twls7iM.png | |||
* `Installation`_ | |||
* `Configuration`_ | |||
* `Usage`_ | |||
* `Changelog`_ | |||
* `Contributors`_ | |||
* `License`_ | |||
------------ | |||
============ | |||
Installation | |||
------------ | |||
============ | |||
Install using pip | |||
@@ -57,13 +55,53 @@ Description: .. image:: https://pypip.in/version/rtv/badge.svg?text=version&styl | |||
$ rtv | |||
$ rtv --help | |||
----- | |||
============= | |||
Configuration | |||
============= | |||
RTV will read a configuration file located at ``$XDG_CONFIG_HOME/rtv/rtv.cfg`` or ``~/.config/rtv/rtv.cfg`` if ``$XDG_CONFIG_HOME`` is not set. | |||
This can be used to avoid having to re-enter login credentials every time the program is launched. | |||
Each line in the file will replace the corresponding default argument in the launch script. | |||
Example config: | |||
.. code-block:: ini | |||
[rtv] | |||
username=MyUsername | |||
password=MySecretPassword | |||
# Log file location | |||
log=/tmp/rtv.log | |||
# Default subreddit | |||
subreddit=CollegeBasketball | |||
# Default submission link - will be opened every time the program starts | |||
# link=http://www.reddit.com/r/CollegeBasketball/comments/31irjq | |||
# Enable unicode characters (experimental) | |||
# This is known to be unstable with east asian wide character sets | |||
# unicode=true | |||
RTV allows users to compose comments and replys using their preferred text editor (**vi**, **nano**, **gedit**, etc). | |||
Set the environment variable ``RTV_EDITOR`` to specify which editor the program should use. | |||
.. code-block:: bash | |||
$ export RTV_EDITOR=gedit | |||
===== | |||
Usage | |||
----- | |||
===== | |||
RTV currently supports browsing both subreddits and individual submissions. In each mode the controls are slightly different. | |||
**Global Commands** | |||
--------------- | |||
Global Commands | |||
--------------- | |||
:``▲``/``▼`` or ``j``/``k``: Scroll to the prev/next item | |||
:``a``/``z``: Upvote/downvote the selected item | |||
@@ -73,7 +111,9 @@ Description: .. image:: https://pypip.in/version/rtv/badge.svg?text=version&styl | |||
:``?``: Show the help screen | |||
:``q``: Quit | |||
**Subreddit Mode** | |||
-------------- | |||
Subreddit Mode | |||
-------------- | |||
In subreddit mode you can browse through the top submissions on either the front page or a specific subreddit. | |||
@@ -90,7 +130,9 @@ Description: .. image:: https://pypip.in/version/rtv/badge.svg?text=version&styl | |||
* ``/r/front`` will redirect to the front page | |||
* ``/r/me`` will display your submissions | |||
**Submission Mode** | |||
--------------- | |||
Submission Mode | |||
--------------- | |||
In submission mode you can view the self text for a submission and browse comments. | |||
@@ -98,41 +140,36 @@ Description: .. image:: https://pypip.in/version/rtv/badge.svg?text=version&styl | |||
:``►`` or ``l``: Fold the selected comment, or load additional comments | |||
:``c``: Post a new comment on the selected item | |||
------------- | |||
Configuration | |||
------------- | |||
RTV will read a configuration file located at ``$XDG_CONFIG_HOME/rtv/rtv.cfg`` or ``~/.config/rtv/rtv.cfg`` if ``$XDG_CONFIG_HOME`` is not set. | |||
This can be used to avoid having to re-enter login credentials every time the program is launched. | |||
Each line in the file will replace the corresponding default argument in the launch script. | |||
Example config: | |||
.. code-block:: ini | |||
[rtv] | |||
username=MyUsername | |||
password=MySecretPassword | |||
========= | |||
Changelog | |||
========= | |||
Please see `CHANGELOG.rst <https://github.com/michael-lazar/rtv/blob/master/CHANGELOG.rst>`_. | |||
# Log file location | |||
log=/tmp/rtv.log | |||
# Default subreddit | |||
subreddit=CollegeBasketball | |||
============ | |||
Contributors | |||
============ | |||
Please see `CONTRIBUTORS.rst <https://github.com/michael-lazar/rtv/blob/master/CONTRIBUTORS.rst>`_. | |||
# Default submission link - will be opened every time the program starts | |||
# link=http://www.reddit.com/r/CollegeBasketball/comments/31irjq | |||
# Enable unicode characters (experimental) | |||
# This is known to be unstable with east asian wide character sets | |||
# unicode=true | |||
======= | |||
License | |||
======= | |||
Please see `LICENSE <https://github.com/michael-lazar/rtv/blob/master/LICENSE>`_. | |||
RTV allows users to compose comments and replys using their preferred text editor (**vi**, **nano**, **gedit**, etc). | |||
Set the environment variable ``RTV_EDITOR`` to specify which editor the program should use. | |||
.. code-block:: bash | |||
.. |python| image:: https://pypip.in/py_versions/rtv/badge.svg?style=flat-square | |||
:target: https://pypi.python.org/pypi/rtv/ | |||
:alt: Supported Python versions | |||
$ export RTV_EDITOR=gedit | |||
.. |pypi| image:: https://pypip.in/version/rtv/badge.svg?text=version&style=flat-square | |||
:target: https://pypi.python.org/pypi/rtv/ | |||
:alt: Latest Version | |||
.. |downloads| image:: https://pypip.in/download/rtv/badge.svg?period=month&style=flat-square | |||
:target: https://pypi.python.org/pypi/rtv/ | |||
:alt: Downloads | |||
Keywords: reddit terminal praw curses | |||
Platform: UNKNOWN |
@@ -1,3 +1,6 @@ | |||
CHANGELOG.rst | |||
CONTRIBUTORS.rst | |||
LICENSE | |||
MANIFEST.in | |||
README.rst | |||
setup.cfg |
@@ -0,0 +1 @@ | |||
@@ -1 +1 @@ | |||
__version__ = '1.2' | |||
__version__ = '1.2.1' |
@@ -240,14 +240,11 @@ class SubredditContent(BaseContent): | |||
self.get(0) | |||
except (praw.errors.APIException, requests.HTTPError, | |||
praw.errors.RedirectException): | |||
raise SubredditError(display_name) | |||
raise SubredditError(name) | |||
@classmethod | |||
def from_name(cls, reddit, name, loader, order='hot', query=None): | |||
if order not in ['hot', 'top', 'rising', 'new', 'controversial']: | |||
raise SubredditError(display_name) | |||
name = name.strip(' /') # Strip leading and trailing backslashes | |||
if name.startswith('r/'): | |||
name = name[2:] | |||
@@ -260,6 +257,9 @@ class SubredditContent(BaseContent): | |||
if order != 'hot': | |||
display_name += '/{}'.format(order) | |||
if order not in ['hot', 'top', 'rising', 'new', 'controversial']: | |||
raise SubredditError(name) | |||
if name == 'me': | |||
if not reddit.is_logged_in(): | |||
raise AccountError |
@@ -0,0 +1,56 @@ | |||
c4d97f939fad823f6575a9e812f3dc54fad3ad5b not-for-merge branch 'controller' of https://github.com/michael-lazar/rtv | |||
ecbc624caa8338b768c283ff8e26e61e198edd15 not-for-merge branch 'master' of https://github.com/michael-lazar/rtv | |||
d5f68215cdbc5906c19a64c0bab2e3b737a9bb29 not-for-merge branch 'pypi' of https://github.com/michael-lazar/rtv | |||
7c7606d288b0ec306577cb1c79b3ea9cb90e4caf not-for-merge 'refs/pull/1/head' of https://github.com/michael-lazar/rtv | |||
98fc02e28e0147509ddfe4e601a97859a0e47cfc not-for-merge 'refs/pull/11/head' of https://github.com/michael-lazar/rtv | |||
6a5da9f1ec1305ce2fdf4a1e3ec3f90afc6772cb not-for-merge 'refs/pull/13/head' of https://github.com/michael-lazar/rtv | |||
9fcb16b3e48467566140db4a37817cbe82116eb9 not-for-merge 'refs/pull/14/head' of https://github.com/michael-lazar/rtv | |||
b5bfd40b1a0e1119cdbd7e6d5b13b11fcb260fc5 not-for-merge 'refs/pull/16/head' of https://github.com/michael-lazar/rtv | |||
f1d4b5909b8490551b6fc8ff70cc322cab42ce48 not-for-merge 'refs/pull/16/merge' of https://github.com/michael-lazar/rtv | |||
cb5d730d39943b130abec75d4c8c20e54ec7ac54 not-for-merge 'refs/pull/18/head' of https://github.com/michael-lazar/rtv | |||
505a49552dd3f016ec4993f237a7bbe2b407b9cf not-for-merge 'refs/pull/18/merge' of https://github.com/michael-lazar/rtv | |||
73af45f4a20cda0392dad41dd3e6f37d4c470ec3 not-for-merge 'refs/pull/19/head' of https://github.com/michael-lazar/rtv | |||
f25ab62d48f62c027e1f8d6424d0d2ddfccd4fa2 not-for-merge 'refs/pull/20/head' of https://github.com/michael-lazar/rtv | |||
f08693988fd087a316456306459f114e637b4be6 not-for-merge 'refs/pull/22/head' of https://github.com/michael-lazar/rtv | |||
09ed21b75c7bf0291b163b8a72c5da62272b2f12 not-for-merge 'refs/pull/29/head' of https://github.com/michael-lazar/rtv | |||
3379a99e0d9502d9205dc30e69fc56f585dc7a25 not-for-merge 'refs/pull/30/head' of https://github.com/michael-lazar/rtv | |||
af86a3ad67747ea42fe2ed6a40d582c10fce319e not-for-merge 'refs/pull/31/head' of https://github.com/michael-lazar/rtv | |||
abadbd7037503973ce009b7c5e8c79150b1c375d not-for-merge 'refs/pull/33/head' of https://github.com/michael-lazar/rtv | |||
34dfa53b9f4f05a8afd051eda55dc4c79371b6dc not-for-merge 'refs/pull/34/head' of https://github.com/michael-lazar/rtv | |||
9744641d32e971f50aa90ce8f564ead70f9a1788 not-for-merge 'refs/pull/37/head' of https://github.com/michael-lazar/rtv | |||
2a21064438cb97d633696b7ea2a1d3a42a35fc76 not-for-merge 'refs/pull/37/merge' of https://github.com/michael-lazar/rtv | |||
da851ec0485f22e3e3df0332ce55c0ee650a9d9c not-for-merge 'refs/pull/38/head' of https://github.com/michael-lazar/rtv | |||
60dfc858552940d7902812e316f16383b811aa88 not-for-merge 'refs/pull/40/head' of https://github.com/michael-lazar/rtv | |||
eea306a980461d1aefff908aded5a78decaf1b36 not-for-merge 'refs/pull/41/head' of https://github.com/michael-lazar/rtv | |||
571e1e82c57519b661b1a7bdc02a541985c34f4d not-for-merge 'refs/pull/43/head' of https://github.com/michael-lazar/rtv | |||
15aba8b0eb91d5182cfa459ec516ed774834dc61 not-for-merge 'refs/pull/44/head' of https://github.com/michael-lazar/rtv | |||
32fd689544397653c8e0eca58d5d082a12075057 not-for-merge 'refs/pull/45/head' of https://github.com/michael-lazar/rtv | |||
7d461ffc58be34b4bbf671eddb5f5899e630ab38 not-for-merge 'refs/pull/46/head' of https://github.com/michael-lazar/rtv | |||
80cdf036ef3051c326ddcb19c193c0088fab09c8 not-for-merge 'refs/pull/48/head' of https://github.com/michael-lazar/rtv | |||
601336ad37f4d4d357af8e3e02e3cb19bfb8696f not-for-merge 'refs/pull/49/head' of https://github.com/michael-lazar/rtv | |||
bf512d22f5dac79f355adfee20fe827bff7d55cd not-for-merge 'refs/pull/49/merge' of https://github.com/michael-lazar/rtv | |||
e33c4315126dcd3d5c05584f2815c9c5f4a680d0 not-for-merge 'refs/pull/51/head' of https://github.com/michael-lazar/rtv | |||
bdecf095ef593745b8a725b0eec6511d03587642 not-for-merge 'refs/pull/51/merge' of https://github.com/michael-lazar/rtv | |||
e31997d392b10e763a52f26f4ad19dbdfefd8a4e not-for-merge 'refs/pull/52/head' of https://github.com/michael-lazar/rtv | |||
ac98f564a38ad61fe93a18dd802332af7383c2da not-for-merge 'refs/pull/53/head' of https://github.com/michael-lazar/rtv | |||
bdce9cb4b5484db9abda70f908798f4d7a2c7da0 not-for-merge 'refs/pull/54/head' of https://github.com/michael-lazar/rtv | |||
37c43559df699d7119df9e83d8c39bbd9194d63f not-for-merge 'refs/pull/56/head' of https://github.com/michael-lazar/rtv | |||
49977151d1f0e3ca6b14eb1e63bf7380021c76ce not-for-merge 'refs/pull/58/head' of https://github.com/michael-lazar/rtv | |||
edcee5c82a14ecfc6d9eca039f06580c1165c147 not-for-merge 'refs/pull/59/head' of https://github.com/michael-lazar/rtv | |||
cac1a41951439825c40274ac3c6aee638e2c4da9 not-for-merge 'refs/pull/59/merge' of https://github.com/michael-lazar/rtv | |||
dd1aa1bd4fac1ffe1c0ac72c84949cc6545a5ce4 not-for-merge 'refs/pull/60/head' of https://github.com/michael-lazar/rtv | |||
c7a760791a6e9c168f5ff73dc614853bfdc89d0f not-for-merge 'refs/pull/61/head' of https://github.com/michael-lazar/rtv | |||
8f14be279713920eda7432d721b159cdad6b468e not-for-merge 'refs/pull/63/head' of https://github.com/michael-lazar/rtv | |||
f1f5a7db21ab3b50b1082cd5f85c18d2602adc77 not-for-merge 'refs/pull/66/head' of https://github.com/michael-lazar/rtv | |||
ce12b5cbf2d2ab1fb4bc27112c84c48b39372e4f not-for-merge 'refs/pull/66/merge' of https://github.com/michael-lazar/rtv | |||
2f4f706d0c78cf5f6eb88ef9e9b77e5925e190ba not-for-merge 'refs/pull/68/head' of https://github.com/michael-lazar/rtv | |||
ee9d5bc23d1b827bab17cc47d5fc43c60542f1a6 not-for-merge 'refs/pull/68/merge' of https://github.com/michael-lazar/rtv | |||
dcdfd643cc70d0dc6561d517d4200b43ab350002 not-for-merge 'refs/pull/69/head' of https://github.com/michael-lazar/rtv | |||
601c13338f535cf540bce346cc282e6a48ba020e not-for-merge 'refs/pull/72/head' of https://github.com/michael-lazar/rtv | |||
b2bf27d242a2735dcfe97df7a6d9873b010889cf not-for-merge 'refs/pull/72/merge' of https://github.com/michael-lazar/rtv | |||
a294010e27568460f65d556709a1cfb1c5df5dc5 not-for-merge 'refs/pull/73/head' of https://github.com/michael-lazar/rtv | |||
4b326cf218292910a98db62a66edc488d71efba0 not-for-merge 'refs/pull/74/head' of https://github.com/michael-lazar/rtv | |||
b0124560be42f7c4f85ffb7d467dff7b2ac63cf3 not-for-merge 'refs/pull/75/head' of https://github.com/michael-lazar/rtv | |||
161fe186dd4d83248d7a50513030c747be3a67ba not-for-merge 'refs/pull/79/head' of https://github.com/michael-lazar/rtv | |||
6036d90e127e1f0fe96ecff31957b7c30946d2d7 not-for-merge tag 'v1.2' of https://github.com/michael-lazar/rtv | |||
f9f955deb0150cca26250754132f547237811451 not-for-merge tag 'v1.2.1' of https://github.com/michael-lazar/rtv |
@@ -0,0 +1 @@ | |||
x•ŽÑ !Dý¦Šm@÷‰1a,'æÁhùb ~M2É›7¡î{î ´<ôÆQZ‡V¹¤3Ë4¹Èz!^¢GôiR&úY<©qéà ik�1xã1‘E"§mLƒ“Œ™ƒd´VЫßkƒ[õ¹À¹ÿâá[}—ëºSÞN¡î˜Œn;á(g)Åhǽ΃"åGØraÂp§²òVWñqKJ |
@@ -0,0 +1,4 @@ | |||
xm‘MOֳ0†9קWר�´�q!@¨@C¨«@p§ֻ�´I\%©×ם׳“�L|¥ַ<��׳6Sִא�לפ(»תףeEש·d¼•¬קd�#+�ײ�'נ‚ֳ†”¢A�:N�ל₪…ך׀G’‰¾t׀Yjxו§YvZV¹�(�¡…Kב}w1›ױׂ‹�M+ׂ³_ֲץַ�XT“n, &U@אׁ}ם]�rXa‹�Bהִ/¶®ױ>ך�„–dt”ln‚ #��³…¼¯w©צ�״v{VCע\�uֺwa½"°(k� | |||
װ2eFֵ�ֽ2•�± °!6Q/ˆqכב־rnxrץכ/8�%9†3₪1¹gP��jַ=·]נOז©ה?נ!ךֹ[J-F¥%� | |||
ּ†SׂןR÷v¸ח±b±F %*§1eדִ£�ך‹ה | |||
ֳIr�lֲˆֹµ4�¢_�° ״¬׃�ףם�ת'Q-� |
@@ -0,0 +1,2 @@ | |||
x¥�KnÃ0D»ö)¸Ë*±¨¿‹¢(ºnA}l°¬@Qºèé«Àè ºpÀyàЗœS¡øK«1‚³Qj�Ü0AÓä¬ï"øÌ "ú™&/´ãÃ�jÜÌÓ<)¢c¨˜÷Ä5WÌ(‰=¤¤áÂXD©ðo5ÎA+¸´Á�b | |||
Ìi\¤�£�m-®É¯7ø¢ªð¶=å’“ó�%SÚ.¾äw@Ém§X¡áÌcCw{µÿ®±.ý-•v¿Â)Ó½OPfX[»Ý_ÇqIm}¸ç ãg-.ícmß�öVà˜ÏGhø!—o9 |
@@ -0,0 +1 @@ | |||
x¥�ÁjÃ0D{öWè–SÂj¥ÕZJè¹ùˆ•¼Š –]÷Ò¯¯Jéô40Ì<fò^ërür4UÚXR�n*a,,…“jDŠ9…= Òt;L‰%Mšz rHÀäÃBžÑñh'û—O ‚Š!RvÌS´ZR¢Šï,_;òyÌ{3÷%Ï¢«y—/iæºþÈ¥þšˆ·G•e½ä½¾ëqt}5zsºÛ¯ú/Èp×öP“šly6§·¶§e;WyvîiøI%_9 |
@@ -0,0 +1,3 @@ | |||
x•�KN1DYֿ)�= ֶ¿!ֱ��np�‘ַQ”�ד�UµJ¯װU©•’¨ �F'כ´£dXZ%8(o’׃ | |||
¢�>®^³׳2י—v×״ | |||
ע†״¬“�›¸ 7U»„B�"ַ–׃¼��ײב«ֵ\ב}<ה{»ױֿן‚yK|€\•WֱIoבU!–י־zƒ|$/; ‚N�iּ׳�ח�[!ָu48hNְ p�יx�;��'¶µt-s��ך3�8w÷µ{�–?� _ֲ |
@@ -0,0 +1,2 @@ | |||
x¥ŽAj1sÖ+æ^FZk$� öÁ�@œKò�‘4V–Ù(—¼> | |||
yBMC5Ýtjµ–†ôCßD {¦¡H’uĈ)0ÙhE±&2£»h¿¨;orEô¼ñy¤I£KsvžD‚'Ê68(ÎAñW¿¶ .%]YVxáoÞà°þÚTÿ 1Ç�Êe�R«� ÷ÆÏ¸'t°C‡¨W»ükD�r–¹%XÊ*ŸÐ\N¯ÏOç·÷©ÜÔr”Râ |
@@ -0,0 +1 @@ | |||
x¥�Kj1³Φ)ϊZ�ΡBΘΚ«δ==έρΐ(2B'§ΟΑ«‚Άx<nµnά_F�β1…Ω�.!-κ9ω�X•ΡΫ�Kv8Kj®Τε{@DΧ‚b]«¨RΆµ·eNKb�%ΔΥΙΠm\Z‡Ο�/$;|Π/uxέ�1Υ‡tξύ«�¶OάκΨΰ²+!η'L�ζ°ΗΥ!O��σv—ΖΟµ�φV΅‹�Φ'σμQ� |
@@ -0,0 +1,2 @@ | |||
x•O;NÄ0¥Î)¦Û | |||
2öرƒât\`Æo‚H¼òzáúx@õ¤§÷Meß·„óC«ª`ˆÕ”hü2Çà z�Ìdò–bviæ—áÂU�ÙMÄ™�¤<¥ÅZƒ!¡•E’XV%Œþô‰�NPfõìÑ#;�ÄQà4SŠ¡ø�om->Šl¼´;|J-?ÇÛyçíë)•ýŒ³ÑÎÑL�=‡Îö;MÿmÞµž¤ò‘V8í|í!'(ÖÖ.×çq<om½É½wì;úœ±¶ïábeb |
@@ -0,0 +1,2 @@ | |||
x¥ŽAjÃ0E»Ö)æ1£±± „„P’EÚža$�ƒGÝôôuèºzðà}~œK+PïÞê¢ | |||
¬1£íU±£6e7dÆÌAÕS‹J18ç»Þ<dÑû&dËÖSTVŸ‰ƒWÄ¡ ”8ÙÁyv9³‘ïz›øãMt‚‹üÈÛé…¦üI¢ýµÈ85q.;° -vv`Ø #šÕ®W«þkÄRÒIª>¡Îp<>Oï—¯Sc~ ÖP- |