~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
4
# Copyright (C) 2007-2008 The University of Melbourne
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
1099.1.48 by William Grant
ivle.webapp.filesystem.diff: Port www/apps/diff to new framework. This moves
20
# Author: David Coles, Will Grant
21
22
'''
23
A script for generating a Subversion diff. It is intended to be run via
24
trampoline by ivle.webapp.filesystem.diff.DiffView.
25
'''
26
27
import os
28
import sys
1633 by Matt Giuca
Correct locale setting for Subversion. Previously pysvn would throw a nasty
29
import locale
1099.1.48 by William Grant
ivle.webapp.filesystem.diff: Port www/apps/diff to new framework. This moves
30
31
import cjson
1072 by matt.giuca
Renamed scripts to services.
32
import pysvn
33
1759 by William Grant
Fix diffservice and svnlogservice to create authentication-capable pysvn.Clients, so they don't crash if credentials aren't cached.
34
import ivle.conf
1079 by William Grant
Merge setup-refactor branch. This completely breaks existing installations;
35
import ivle.svn
36
1633 by Matt Giuca
Correct locale setting for Subversion. Previously pysvn would throw a nasty
37
# Set locale to UTF-8
38
locale.setlocale(locale.LC_CTYPE, "en_US.UTF-8")
1072 by matt.giuca
Renamed scripts to services.
39
40
# Default revisions
41
revs = [pysvn.Revision(x) for x in [pysvn.opt_revision_kind.base,
42
                                    pysvn.opt_revision_kind.working]]
1099.1.48 by William Grant
ivle.webapp.filesystem.diff: Port www/apps/diff to new framework. This moves
43
44
# Override revisions from argv.
45
for ri in range(len(sys.argv[2:4])):
1099.1.50 by William Grant
ivle.webapp.filesystem.diff: Import BadRequest; it was used.
46
    r = ivle.svn.revision_from_string(sys.argv[2 + ri])
1072 by matt.giuca
Renamed scripts to services.
47
    if r is not None:
48
        revs[ri] = r
49
50
# Attempt to get the diff for these revisons
51
try:
1759 by William Grant
Fix diffservice and svnlogservice to create authentication-capable pysvn.Clients, so they don't crash if credentials aren't cached.
52
    svnclient = ivle.svn.create_auth_svn_client(username=ivle.conf.login,
53
                                                password=ivle.conf.svn_pass)
1099.1.50 by William Grant
ivle.webapp.filesystem.diff: Import BadRequest; it was used.
54
    svnclient.exception_style = 1
1072 by matt.giuca
Renamed scripts to services.
55
    diff = svnclient.diff
1476 by William Grant
Unbreak diffservice with Subversion >= 1.6
56
57
    # pysvn's diff tempfile behaviour changes with Subversion 1.6.x.
58
    # < 1.6 wants a filename, >= 1.6 wants a directory.
59
    if pysvn.svn_version > (1, 6):
60
        tmp_path = '/tmp'
61
    else:
62
        tmp_path = '/tmp/svndiff'
63
64
    diff_text = diff(tmp_path,
1099.1.48 by William Grant
ivle.webapp.filesystem.diff: Port www/apps/diff to new framework. This moves
65
        os.path.join('/home', sys.argv[1]),
1072 by matt.giuca
Renamed scripts to services.
66
        revision1=revs[0],
67
        revision2=revs[1]
68
    )
1645 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. This is the final fix in Launchpad Bug #523495 -- all Subversion filename issues fixed (except the crash on log and diff directly on a non-ASCII filename, covered by bug #523500).
69
    print cjson.encode({'diff': diff_text.decode('utf-8')})
1099.1.50 by William Grant
ivle.webapp.filesystem.diff: Import BadRequest; it was used.
70
except pysvn.ClientError, e:
71
    error = e[0]
72
73
    try:
74
        code = e[1][0][1]
75
        # 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
76
        # 150000: ERR_ENTRY_NOT_FOUND
1099.1.50 by William Grant
ivle.webapp.filesystem.diff: Import BadRequest; it was used.
77
        # 155007: WC_NOT_DIRECTORY.
78
        # 160013: FS_NOT_FOUND
79
        # 200005: UNVERSIONED_RESOURCE
1326.1.5 by David Coles
Return 404 when subversion returns ERR_ENTRY_NOT_FOUND errors in services
80
        if code in (150000, 155007, 160013, 200005):
1099.1.50 by William Grant
ivle.webapp.filesystem.diff: Import BadRequest; it was used.
81
            error = 'notfound'
82
        else:
83
            error = '%s (code %d)' % (error, code) 
84
    except IndexError:
85
        pass
86
87
    print cjson.encode({'error': error})