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

« back to all changes in this revision

Viewing changes to services/diffservice

  • Committer: William Grant
  • Date: 2012-06-28 01:52:02 UTC
  • Revision ID: me@williamgrant.id.au-20120628015202-f6ru7o367gt6nvgz
Hah

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
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
 
29
import locale
 
30
 
 
31
try:
 
32
    import json
 
33
except ImportError:
 
34
    import simplejson as json
 
35
import pysvn
 
36
 
 
37
import ivle.conf
 
38
import ivle.svn
 
39
 
 
40
# Set locale to UTF-8
 
41
locale.setlocale(locale.LC_CTYPE, "en_US.UTF-8")
 
42
 
 
43
# Default revisions
 
44
revs = [pysvn.Revision(x) for x in [pysvn.opt_revision_kind.base,
 
45
                                    pysvn.opt_revision_kind.working]]
 
46
 
 
47
# Override revisions from argv.
 
48
for ri in range(len(sys.argv[2:4])):
 
49
    r = ivle.svn.revision_from_string(sys.argv[2 + ri])
 
50
    if r is not None:
 
51
        revs[ri] = r
 
52
 
 
53
# Attempt to get the diff for these revisons
 
54
try:
 
55
    svnclient = ivle.svn.create_auth_svn_client(username=ivle.conf.login,
 
56
                                                password=ivle.conf.svn_pass)
 
57
    svnclient.exception_style = 1
 
58
    diff = svnclient.diff
 
59
 
 
60
    # pysvn's diff tempfile behaviour changes with Subversion 1.6.x.
 
61
    # < 1.6 wants a filename, >= 1.6 wants a directory.
 
62
    if pysvn.svn_version > (1, 6):
 
63
        tmp_path = '/tmp'
 
64
    else:
 
65
        tmp_path = '/tmp/svndiff'
 
66
 
 
67
    diff_text = diff(tmp_path,
 
68
        os.path.join('/home', sys.argv[1]),
 
69
        revision1=revs[0],
 
70
        revision2=revs[1]
 
71
    )
 
72
    print json.dumps({'diff': diff_text.decode('utf-8')})
 
73
except pysvn.ClientError, e:
 
74
    error = e[0]
 
75
 
 
76
    try:
 
77
        code = e[1][0][1]
 
78
        # See subversion/include/svn_error_codes.h.
 
79
        # 150000: ERR_ENTRY_NOT_FOUND
 
80
        # 155007: WC_NOT_DIRECTORY.
 
81
        # 160013: FS_NOT_FOUND
 
82
        # 200005: UNVERSIONED_RESOURCE
 
83
        if code in (150000, 155007, 160013, 200005):
 
84
            error = 'notfound'
 
85
        else:
 
86
            error = '%s (code %d)' % (error, code) 
 
87
    except IndexError:
 
88
        pass
 
89
 
 
90
    print json.dumps({'error': error})