diff --git a/media/css/seahub.css b/media/css/seahub.css
index 3640f0eaa6..ed3fceeba9 100644
--- a/media/css/seahub.css
+++ b/media/css/seahub.css
@@ -277,6 +277,21 @@ table img {
font-size:16px;
margin-bottom:14px;
}
+.lsch {
+ font-size:12px;
+ color:#666;
+ text-decoration:underline;
+}
+#ls-ch {/*repo commit details container*/
+ min-width:300px;
+ min-height:300px;
+ max-width:850px;
+ max-height:550px;
+ overflow:auto;
+}
+#ls-ch ul {
+ padding:0 0 6px 0;
+}
/*repo-share-form*/
#to_email,
#added-member-name {
diff --git a/po.py b/po.py
index de554687b5..67a4486056 100644
--- a/po.py
+++ b/po.py
@@ -9,5 +9,8 @@ TRANSLATION_MAP = {
'and' : u'以及另外',
'more files' : u'个文件',
'Reverted repo to status at' : u'同步目录内容还原到',
+ 'Merged ' : u'合并了',
+ '\'s changes' : u' 的修改',
+ 'other' : u'其他人',
'Merged others\' changes' : u'合并了其他人的修改',
}
diff --git a/templates/repo_history.html b/templates/repo_history.html
index 8b272820f3..51fc69bbda 100644
--- a/templates/repo_history.html
+++ b/templates/repo_history.html
@@ -25,7 +25,12 @@
{% else %}
未知 |
{% endif %}
- {{ commit.props.desc|translate_commit_desc }} |
+
+ {{ commit.props.desc|translate_commit_desc }}
+ {% if not forloop.last %}
+ 详情
+ {% endif %}
+ |
{% if not forloop.last %}
浏览
@@ -63,10 +68,57 @@
100
{% endif %}
+
+
{% endblock %}
{% block extra_script %}
+
+addConfirmTo($(".repo-revert"), '确定要还原该目录?');
{% endblock %}
diff --git a/urls.py b/urls.py
index 13980d1129..377bde5185 100644
--- a/urls.py
+++ b/urls.py
@@ -8,7 +8,7 @@ from seahub.views import root, peers, myhome, \
ownerhome, remove_fetched_repo, repo_history_dir, repo_history_revert, \
user_info, repo_set_access_property, repo_access_file, \
repo_add_share, repo_list_share, repo_remove_share, repo_download, \
- seafile_access_check, back_local, group_admin
+ seafile_access_check, back_local, group_admin, repo_history_changes
# Uncomment the next two lines to enable the admin:
#from django.contrib import admin
@@ -41,6 +41,7 @@ urlpatterns = patterns('',
(r'^repo/history/dir/(?P[^/]+)/$', repo_history_dir),
(r'^repo/history/revert/(?P[^/]+)/$', repo_history_revert),
# (r'^repo/token/modify/(?P[^/]+)/$', modify_token),
+ (r'^repo/history/changes/(?P[^/]+)/$', repo_history_changes),
(r'^repo/remove/(?P[^/]+)/$', remove_repo),
# (r'^repo/removefetched/(?P[^/]+)/(?P[^/]+)/$', remove_fetched_repo),
(r'^repo/setap/(?P[^/]+)/$', repo_set_access_property),
diff --git a/views.py b/views.py
index 1f201bdcb4..5be70ab53e 100644
--- a/views.py
+++ b/views.py
@@ -1,6 +1,7 @@
# encoding: utf-8
import settings
import stat
+import simplejson as json
from urllib import quote
from django.core.urlresolvers import reverse
from django.db import IntegrityError
@@ -425,6 +426,88 @@ def repo_history_revert(request, repo_id):
return go_error(request, u'未知错误')
return HttpResponseRedirect(reverse(repo_history, args=[repo_id]))
+
+def get_filename(start, ent):
+ i = start + 1
+ lenidx = start - 1
+ while i <= len(ent):
+ tmp = " ".join(ent[start:i])
+ if len(tmp) == int(ent[lenidx]):
+ return (tmp, i)
+ i = i + 1
+ return ("", 0)
+
+def add_to_status_list(lists, status_ent):
+ if status_ent[1] == 'A':
+ filename, index = get_filename(4, status_ent)
+ lists['new'].append(filename)
+ elif status_ent[1] == 'D':
+ filename, index = get_filename(4, status_ent)
+ lists['removed'].append(filename)
+ elif status_ent[1] == 'R':
+ filename1, index1 = get_filename(4, status_ent)
+ filename2, index2 = get_filename(index1 + 1, status_ent)
+ lists['renamed'].append(filename1 + u' 被移动到 ' + filename2)
+ elif status_ent[1] == 'M':
+ filename, index = get_filename(4, status_ent)
+ lists['modified'].append(filename)
+
+def get_diff(repo_id, arg1, arg2):
+ lists = {'new' : [], 'removed' : [], 'renamed' : [], 'modified' : []}
+
+ diff_result = seafserv_threaded_rpc.get_diff(repo_id, arg1, arg2)
+ if diff_result == "":
+ return lists;
+
+ diff_result = diff_result[:len(diff_result)-1]
+
+ for d in diff_result.split("\n"):
+ tmp = d.split(" ")
+ if tmp[0] == 'C':
+ add_to_status_list(lists, tmp)
+
+ return lists
+
+def repo_history_changes(request, repo_id):
+ changes = {}
+ content_type = 'application/json; charset=utf-8'
+
+ repo_ap = seafserv_threaded_rpc.repo_query_access_property(repo_id)
+ if repo_ap == None:
+ repo_ap = 'own'
+
+ if not access_to_repo(request, repo_id, repo_ap):
+ return HttpResponse(json.dumps(changes),
+ content_type=content_type)
+
+ repo = get_repo(repo_id)
+ if not repo:
+ return HttpResponse(json.dumps(changes),
+ content_type=content_type)
+
+ password_set = False
+ if repo.props.encrypted:
+ try:
+ ret = seafserv_rpc.is_passwd_set(repo_id, request.user.username)
+ if ret == 1:
+ password_set = True
+ except:
+ return HttpResponse(json.dumps(changes),
+ content_type=content_type)
+
+ if repo.props.encrypted and not password_set:
+ return HttpResponse(json.dumps(changes),
+ content_type=content_type)
+
+ commit_id = request.GET.get('commit_id', '')
+ if not commit_id:
+ return HttpResponse(json.dumps(changes),
+ content_type=content_type)
+
+ changes = get_diff(repo_id, '', commit_id)
+
+ return HttpResponse(json.dumps(changes),
+ content_type=content_type)
@login_required
def modify_token(request, repo_id):
|