mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-12 13:24:52 +00:00
Fixed bug in getting shared repos using api2, and refactor some code.
This commit is contained in:
@@ -26,9 +26,10 @@ from seahub.utils import gen_file_get_url, gen_token, gen_file_upload_url, \
|
|||||||
get_ccnet_server_addr_port
|
get_ccnet_server_addr_port
|
||||||
|
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
from seaserv import seafserv_rpc, seafserv_threaded_rpc, \
|
from seaserv import seafserv_rpc, seafserv_threaded_rpc, server_repo_size, \
|
||||||
get_personal_groups_by_user, get_session_info, get_repo_token_nonnull, \
|
get_personal_groups_by_user, get_session_info, get_repo_token_nonnull, \
|
||||||
get_group_repos, get_repo, check_permission, get_commits
|
get_group_repos, get_repo, check_permission, get_commits, is_passwd_set,\
|
||||||
|
list_personal_repos_by_owner, list_personal_shared_repos
|
||||||
|
|
||||||
json_content_type = 'application/json; charset=utf-8'
|
json_content_type = 'application/json; charset=utf-8'
|
||||||
|
|
||||||
@@ -98,6 +99,7 @@ HTTP_ERRORS = {
|
|||||||
'419':'Failed to move',
|
'419':'Failed to move',
|
||||||
'420':'Failed to rename',
|
'420':'Failed to rename',
|
||||||
'421':'Failed to mkdir',
|
'421':'Failed to mkdir',
|
||||||
|
'422':'Failed to get current commit',
|
||||||
|
|
||||||
'499':'Unknow Error',
|
'499':'Unknow Error',
|
||||||
|
|
||||||
@@ -132,28 +134,13 @@ def calculate_repo_info(repo_list, username):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
for repo in repo_list:
|
for repo in repo_list:
|
||||||
try:
|
|
||||||
commit = get_commits(repo.id, 0, 1)[0]
|
commit = get_commits(repo.id, 0, 1)[0]
|
||||||
|
if not commit:
|
||||||
|
continue
|
||||||
repo.latest_modify = commit.ctime
|
repo.latest_modify = commit.ctime
|
||||||
repo.root = commit.root_id
|
repo.root = commit.root_id
|
||||||
repo.size = seafserv_threaded_rpc.server_repo_size(repo.id)
|
repo.size = server_repo_size(repo.id)
|
||||||
if not repo.size :
|
repo.password_need = is_passwd_set(repo.id, username)
|
||||||
repo.size = 0;
|
|
||||||
|
|
||||||
password_need = False
|
|
||||||
if repo.encrypted:
|
|
||||||
try:
|
|
||||||
ret = seafserv_rpc.is_passwd_set(repo.id, username)
|
|
||||||
if ret != 1:
|
|
||||||
password_need = True
|
|
||||||
except SearpcErroe, e:
|
|
||||||
pass
|
|
||||||
repo.password_need = password_need
|
|
||||||
except Exception,e:
|
|
||||||
repo.latest_modify = 0
|
|
||||||
repo.commit = None
|
|
||||||
repo.size = -1
|
|
||||||
repo.password_need = None
|
|
||||||
|
|
||||||
class Repos(APIView):
|
class Repos(APIView):
|
||||||
authentication_classes = (TokenAuthentication, )
|
authentication_classes = (TokenAuthentication, )
|
||||||
@@ -161,17 +148,11 @@ class Repos(APIView):
|
|||||||
|
|
||||||
def get(self, request, format=None):
|
def get(self, request, format=None):
|
||||||
email = request.user.username
|
email = request.user.username
|
||||||
|
repos_json = []
|
||||||
|
|
||||||
owned_repos = seafserv_threaded_rpc.list_owned_repos(email)
|
owned_repos = list_personal_repos_by_owner(email)
|
||||||
calculate_repo_info(owned_repos, email)
|
calculate_repo_info(owned_repos, email)
|
||||||
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
||||||
|
|
||||||
n_repos = seafserv_threaded_rpc.list_share_repos(email,
|
|
||||||
'to_email', -1, -1)
|
|
||||||
calculate_repo_info (n_repos, email)
|
|
||||||
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
|
||||||
|
|
||||||
repos_json = []
|
|
||||||
for r in owned_repos:
|
for r in owned_repos:
|
||||||
repo = {
|
repo = {
|
||||||
"type":"repo",
|
"type":"repo",
|
||||||
@@ -187,13 +168,21 @@ class Repos(APIView):
|
|||||||
}
|
}
|
||||||
repos_json.append(repo)
|
repos_json.append(repo)
|
||||||
|
|
||||||
for r in n_repos:
|
shared_repos = list_personal_shared_repos(email, 'to_email', -1, -1)
|
||||||
|
for r in shared_repos:
|
||||||
|
commit = get_commits(r.repo_id, 0, 1)[0]
|
||||||
|
if not commit:
|
||||||
|
continue
|
||||||
|
r.latest_modify = commit.ctime
|
||||||
|
r.root = commit.root_id
|
||||||
|
r.size = server_repo_size(r.repo_id)
|
||||||
|
r.password_need = is_passwd_set(r.repo_id, email)
|
||||||
repo = {
|
repo = {
|
||||||
"type":"srepo",
|
"type":"srepo",
|
||||||
"id":r.id,
|
"id":r.repo_id,
|
||||||
"owner":r.shared_email,
|
"owner":r.user,
|
||||||
"name":r.name,
|
"name":r.repo_name,
|
||||||
"desc":r.desc,
|
"desc":r.repo_desc,
|
||||||
"mtime":r.latest_modify,
|
"mtime":r.latest_modify,
|
||||||
"root":r.root,
|
"root":r.root,
|
||||||
"size":r.size,
|
"size":r.size,
|
||||||
@@ -206,7 +195,7 @@ class Repos(APIView):
|
|||||||
for group in groups:
|
for group in groups:
|
||||||
g_repos = get_group_repos(group.id, email)
|
g_repos = get_group_repos(group.id, email)
|
||||||
calculate_repo_info (g_repos, email)
|
calculate_repo_info (g_repos, email)
|
||||||
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
g_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
||||||
for r in g_repos:
|
for r in g_repos:
|
||||||
repo = {
|
repo = {
|
||||||
"type":"grepo",
|
"type":"grepo",
|
||||||
@@ -252,14 +241,13 @@ class Repo(APIView):
|
|||||||
else:
|
else:
|
||||||
owner = "share"
|
owner = "share"
|
||||||
|
|
||||||
try:
|
last_commit = get_commits(repo.id, 0, 1)[0].ctime
|
||||||
repo.latest_modify = get_commits(repo.id, 0, 1)[0].ctime
|
repo.latest_modify = last_commit.ctime if last_commit else None
|
||||||
except:
|
|
||||||
repo.latest_modify = None
|
|
||||||
|
|
||||||
# query repo infomation
|
# query repo infomation
|
||||||
repo.size = seafserv_threaded_rpc.server_repo_size(repo_id)
|
repo.size = seafserv_threaded_rpc.server_repo_size(repo_id)
|
||||||
current_commit = get_commits(repo_id, 0, 1)[0]
|
current_commit = get_commits(repo_id, 0, 1)[0]
|
||||||
|
root_id = current_commit.root_id if current_commit else None
|
||||||
|
|
||||||
# generate download url for client
|
# generate download url for client
|
||||||
ccnet_applet_root = get_ccnetapplet_root()
|
ccnet_applet_root = get_ccnetapplet_root()
|
||||||
@@ -284,7 +272,7 @@ class Repo(APIView):
|
|||||||
"mtime":repo.lastest_modify,
|
"mtime":repo.lastest_modify,
|
||||||
"size":repo.size,
|
"size":repo.size,
|
||||||
"encrypted":repo.encrypted,
|
"encrypted":repo.encrypted,
|
||||||
"root":current_commit.root_id,
|
"root":root_id,
|
||||||
"password_need":repo.password_need,
|
"password_need":repo.password_need,
|
||||||
"download_url": url,
|
"download_url": url,
|
||||||
}
|
}
|
||||||
@@ -374,6 +362,9 @@ class RepoDirents(APIView):
|
|||||||
return resp
|
return resp
|
||||||
|
|
||||||
current_commit = get_commits(repo_id, 0, 1)[0]
|
current_commit = get_commits(repo_id, 0, 1)[0]
|
||||||
|
if not current_commit:
|
||||||
|
return api_error('422')
|
||||||
|
|
||||||
path = request.GET.get('p', '/')
|
path = request.GET.get('p', '/')
|
||||||
if path[-1] != '/':
|
if path[-1] != '/':
|
||||||
path = path + '/'
|
path = path + '/'
|
||||||
@@ -536,6 +527,9 @@ def reloaddir_if_neccessary (request, repo_id, parent_dir):
|
|||||||
return Response('success')
|
return Response('success')
|
||||||
|
|
||||||
current_commit = get_commits(repo_id, 0, 1)[0]
|
current_commit = get_commits(repo_id, 0, 1)[0]
|
||||||
|
if not current_commit:
|
||||||
|
return api_error('422')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
dir_id = seafserv_threaded_rpc.get_dirid_by_path(current_commit.id,
|
dir_id = seafserv_threaded_rpc.get_dirid_by_path(current_commit.id,
|
||||||
parent_dir.encode('utf-8'))
|
parent_dir.encode('utf-8'))
|
||||||
|
@@ -130,10 +130,8 @@ def org_personal(request, url_prefix):
|
|||||||
r.repo_id = r.id
|
r.repo_id = r.id
|
||||||
r.repo_name = r.name
|
r.repo_name = r.name
|
||||||
r.repo_desc = r.desc
|
r.repo_desc = r.desc
|
||||||
try:
|
last_commit = get_commits(r_id, 0, 1)[0]
|
||||||
r.last_modified = get_commits(r_id, 0, 1)[0].ctime
|
r.last_modified = last_commit.ctime if last_commit else 0
|
||||||
except:
|
|
||||||
r.last_modified = 0
|
|
||||||
r.share_type = 'group'
|
r.share_type = 'group'
|
||||||
r.user = get_org_repo_owner(r_id)
|
r.user = get_org_repo_owner(r_id)
|
||||||
r.user_perm = check_permission(r_id, user)
|
r.user_perm = check_permission(r_id, user)
|
||||||
|
@@ -15,7 +15,8 @@ from service import get_repos, get_repo, get_commits, get_branches, remove_repo,
|
|||||||
list_org_inner_pub_repos, get_org_id_by_repo_id, list_org_shared_repos, \
|
list_org_inner_pub_repos, get_org_id_by_repo_id, list_org_shared_repos, \
|
||||||
list_personal_shared_repos, is_personal_repo, list_inner_pub_repos, \
|
list_personal_shared_repos, is_personal_repo, list_inner_pub_repos, \
|
||||||
is_org_repo_owner, get_org_repo_owner, is_org_repo, get_file_size,\
|
is_org_repo_owner, get_org_repo_owner, is_org_repo, get_file_size,\
|
||||||
list_personal_repos_by_owner, get_repo_token_nonnull, get_repo_owner
|
list_personal_repos_by_owner, get_repo_token_nonnull, get_repo_owner, \
|
||||||
|
server_repo_size
|
||||||
|
|
||||||
from service import get_binding_peerids, is_valid_filename, check_permission,\
|
from service import get_binding_peerids, is_valid_filename, check_permission,\
|
||||||
is_passwd_set
|
is_passwd_set
|
||||||
|
@@ -335,6 +335,13 @@ def is_repo_owner(user, repo_id):
|
|||||||
ret = 0
|
ret = 0
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
def server_repo_size(repo_id):
|
||||||
|
try:
|
||||||
|
size = seafserv_threaded_rpc.server_repo_size(repo_id)
|
||||||
|
except SearpcError:
|
||||||
|
size = 0
|
||||||
|
return size
|
||||||
|
|
||||||
# org repo
|
# org repo
|
||||||
def create_org_repo(repo_name, repo_desc, user, passwd, org_id):
|
def create_org_repo(repo_name, repo_desc, user, passwd, org_id):
|
||||||
"""
|
"""
|
||||||
@@ -408,7 +415,11 @@ def get_org_repo_owner(repo_id):
|
|||||||
# commit
|
# commit
|
||||||
def get_commits(repo_id, offset, limit):
|
def get_commits(repo_id, offset, limit):
|
||||||
"""Get commit lists."""
|
"""Get commit lists."""
|
||||||
return seafserv_threaded_rpc.get_commit_list(repo_id, offset, limit)
|
try:
|
||||||
|
ret = seafserv_threaded_rpc.get_commit_list(repo_id, offset, limit)
|
||||||
|
except SearpcError:
|
||||||
|
ret = None
|
||||||
|
return ret
|
||||||
|
|
||||||
# branch
|
# branch
|
||||||
def get_branches(repo_id):
|
def get_branches(repo_id):
|
||||||
@@ -471,10 +482,8 @@ def get_group_repos(group_id, user):
|
|||||||
repo.owner = seafserv_threaded_rpc.get_group_repo_owner(repo_id)
|
repo.owner = seafserv_threaded_rpc.get_group_repo_owner(repo_id)
|
||||||
repo.share_from_me = True if user == repo.owner else False
|
repo.share_from_me = True if user == repo.owner else False
|
||||||
|
|
||||||
try:
|
last_commit = get_commits(repo.id, 0, 1)[0]
|
||||||
repo.latest_modify = get_commits(repo.id, 0, 1)[0].ctime
|
repo.latest_modify = last_commit.ctime if last_commit else None
|
||||||
except:
|
|
||||||
repo.latest_modify = None
|
|
||||||
|
|
||||||
repos.append(repo)
|
repos.append(repo)
|
||||||
repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
||||||
@@ -512,10 +521,8 @@ def get_org_group_repos(org_id, group_id, user):
|
|||||||
repo_id)
|
repo_id)
|
||||||
repo.sharecd_from_me = True if user == repo.owner else False
|
repo.sharecd_from_me = True if user == repo.owner else False
|
||||||
|
|
||||||
try:
|
last_commit = get_commits(repo.id, 0, 1)[0]
|
||||||
repo.latest_modify = get_commits(repo.id, 0, 1)[0].ctime
|
repo.latest_modify = last_commit.ctime if last_commit else None
|
||||||
except:
|
|
||||||
repo.latest_modify = None
|
|
||||||
|
|
||||||
repos.append(repo)
|
repos.append(repo)
|
||||||
repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
||||||
|
7
utils.py
7
utils.py
@@ -140,13 +140,12 @@ def calculate_repo_last_modify(repo_list):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
for repo in repo_list:
|
for repo in repo_list:
|
||||||
try:
|
|
||||||
repo.latest_modify = get_commits(repo.id, 0, 1)[0].ctime
|
repo.latest_modify = get_commits(repo.id, 0, 1)[0].ctime
|
||||||
except:
|
|
||||||
repo.latest_modify = None
|
|
||||||
|
|
||||||
def check_filename_with_rename(repo_id, parent_dir, filename):
|
def check_filename_with_rename(repo_id, parent_dir, filename):
|
||||||
latest_commit = get_commits(repo_id, 0, 1)[0]
|
latest_commit = get_commits(repo_id, 0, 1)[0]
|
||||||
|
if not latest_commit:
|
||||||
|
return ''
|
||||||
dirents = seafserv_threaded_rpc.list_dir_by_path(latest_commit.id,
|
dirents = seafserv_threaded_rpc.list_dir_by_path(latest_commit.id,
|
||||||
parent_dir.encode('utf-8'))
|
parent_dir.encode('utf-8'))
|
||||||
|
|
||||||
@@ -210,6 +209,8 @@ def get_accessible_repos(request, repo):
|
|||||||
"""
|
"""
|
||||||
def check_has_subdir(repo):
|
def check_has_subdir(repo):
|
||||||
latest_commit = get_commits(repo.id, 0, 1)[0]
|
latest_commit = get_commits(repo.id, 0, 1)[0]
|
||||||
|
if not latest_commit:
|
||||||
|
return False
|
||||||
if latest_commit.root_id == EMPTY_SHA1:
|
if latest_commit.root_id == EMPTY_SHA1:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
9
views.py
9
views.py
@@ -215,8 +215,7 @@ class RepoMixin(object):
|
|||||||
|
|
||||||
def get_current_commit(self):
|
def get_current_commit(self):
|
||||||
# Get newest commit by default, subclasses can override this method.
|
# Get newest commit by default, subclasses can override this method.
|
||||||
current_commit = get_commits(self.repo.id, 0, 1)[0]
|
return get_commits(self.repo.id, 0, 1)[0]
|
||||||
return current_commit
|
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
next = self.request.GET.get('next', '')
|
next = self.request.GET.get('next', '')
|
||||||
@@ -863,10 +862,8 @@ def myhome(request):
|
|||||||
r.repo_id = r.id
|
r.repo_id = r.id
|
||||||
r.repo_name = r.name
|
r.repo_name = r.name
|
||||||
r.repo_desc = r.desc
|
r.repo_desc = r.desc
|
||||||
try:
|
last_commit = get_commits(r_id, 0, 1)[0]
|
||||||
r.last_modified = get_commits(r_id, 0, 1)[0].ctime
|
r.last_modified = last_commit.ctime if last_commit else 0
|
||||||
except:
|
|
||||||
r.last_modified = 0
|
|
||||||
r.share_type = 'group'
|
r.share_type = 'group'
|
||||||
r.user = get_repo_owner(r_id)
|
r.user = get_repo_owner(r_id)
|
||||||
r.user_perm = check_permission(r_id, email)
|
r.user_perm = check_permission(r_id, email)
|
||||||
|
Reference in New Issue
Block a user