~azzar1/unity/add-show-desktop-key

1072 by matt.giuca
Renamed scripts to services.
1
#!/usr/bin/python
2
3
# IVLE - Informatics Virtual Learning Environment
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
4
# Copyright (C) 2008-2009 The University of Melbourne
1072 by matt.giuca
Renamed scripts to services.
5
#
6
# This program is free software; you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 2 of the License, or
9
# (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
20
# Author: William Grant
21
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
22
'''
23
A script for viewing a Subversion log. It is intended to be run via trampoline
24
by ivle.webapp.filesystem.svnlog.SubversionLogView.
25
'''
1072 by matt.giuca
Renamed scripts to services.
26
27
import os
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
28
import sys
1633 by Matt Giuca
Correct locale setting for Subversion. Previously pysvn would throw a nasty
29
import locale
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
30
31
import cjson
1072 by matt.giuca
Renamed scripts to services.
32
import pysvn
33
1079 by William Grant
Merge setup-refactor branch. This completely breaks existing installations;
34
import ivle.svn
1072 by matt.giuca
Renamed scripts to services.
35
1633 by Matt Giuca
Correct locale setting for Subversion. Previously pysvn would throw a nasty
36
# Set locale to UTF-8
37
locale.setlocale(locale.LC_CTYPE, "en_US.UTF-8")
38
1072 by matt.giuca
Renamed scripts to services.
39
try:
40
    client = pysvn.Client()
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
41
    client.exception_style = 1
1648 by Matt Giuca
svnlogservice: Decode argument as UTF-8 so unicode filenames don't crash on input.
42
    logs = client.log(os.path.join('/home', sys.argv[1].decode('utf-8')),
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
43
                      discover_changed_paths=True)
44
    print cjson.encode({'logs': [{'revno': log.revision.number,
1644 by Matt Giuca
svnlogservice: utf-8 decoding of the relevant parts of the dictionary, so they are put into JSON as unicode strings, not UTF-8 strings which are decoded wrongly. svnlog now displays unicode characters correctly.
45
                                  'author': log.author.decode('utf-8'),
46
                                  'message': log.message.decode('utf-8'),
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
47
                                  'date': log.date,
1644 by Matt Giuca
svnlogservice: utf-8 decoding of the relevant parts of the dictionary, so they are put into JSON as unicode strings, not UTF-8 strings which are decoded wrongly. svnlog now displays unicode characters correctly.
48
                                  'paths': [(p.path.decode('utf-8'), p.action)
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
49
                                            for p in log.changed_paths]}
50
                                 for log in logs]})
1072 by matt.giuca
Renamed scripts to services.
51
except pysvn.ClientError, e:
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
52
    error = e[0]
53
54
    try:
55
        code = e[1][0][1]
56
        # See subversion/include/svn_error_codes.h.
1326.1.5 by David Coles
Return 404 when subversion returns ERR_ENTRY_NOT_FOUND errors in services
57
        # 150000: ERR_ENTRY_NOT_FOUND
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
58
        # 155007: WC_NOT_DIRECTORY.
1165.3.85 by William Grant
Attempting to view an SVN log when the repo is empty will not crash now.
59
        # 160006: FS_NO_SUCH_REVISION
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
60
        # 160013: FS_NOT_FOUND
61
        # 200005: UNVERSIONED_RESOURCE
1326.1.5 by David Coles
Return 404 when subversion returns ERR_ENTRY_NOT_FOUND errors in services
62
        if code in (150000, 155007, 160006, 160013, 200005):
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
63
            error = 'notfound'
64
        else:
1165.3.85 by William Grant
Attempting to view an SVN log when the repo is empty will not crash now.
65
            error = '%s (code %d)' % (error, code)
1099.1.54 by William Grant
ivle.webapp.filesystem.svnlog: Port www/apps/svnlog to new framework. As with
66
    except IndexError:
67
        pass
68
69
    print cjson.encode({'error': error})