diff --git a/seahub/api2/endpoints/repo_commit_dir.py b/seahub/api2/endpoints/repo_commit_dir.py index 129e050dad..645f3c550b 100644 --- a/seahub/api2/endpoints/repo_commit_dir.py +++ b/seahub/api2/endpoints/repo_commit_dir.py @@ -15,6 +15,7 @@ from seahub.api2.authentication import TokenAuthentication from seahub.api2.utils import api_error from seahub.views import check_folder_permission from seaserv import seafile_api +from seahub.utils import normalize_dir_path logger = logging.getLogger(__name__) @@ -24,20 +25,21 @@ class RepoCommitDirView(APIView): permission_classes = (IsAuthenticated,) throttle_classes = (UserRateThrottle,) - def _get_item_info(self, item, path): + def _get_item_info(self, dirent, path): - item_info = { - 'parent_dir': path, - 'name': item.obj_name, - } - - if stat.S_ISDIR(item.mode): - item_info['type'] = 'dir' + # # seahub/seahub/api2/views get_dir_file_recursively + entry = {} + if stat.S_ISDIR(dirent.mode): + entry['type'] = 'dir' else: - item_info['type'] = 'file' - item_info['size'] = item.size + entry['type'] = 'file' + entry['size'] = dirent.size - return item_info + entry['parent_dir'] = path + entry['obj_id'] = dirent.obj_id + entry['name'] = dirent.obj_name + + return entry def get(self, request, repo_id, commit_id, format=None): """ List dir by commit @@ -49,6 +51,7 @@ class RepoCommitDirView(APIView): # argument check path = request.GET.get('path', '/') + path = normalize_dir_path(path) # resource check repo = seafile_api.get_repo(repo_id) diff --git a/tests/api/endpoints/test_repo_commit_dir.py b/tests/api/endpoints/test_repo_commit_dir.py index 21dab80514..82f7706516 100644 --- a/tests/api/endpoints/test_repo_commit_dir.py +++ b/tests/api/endpoints/test_repo_commit_dir.py @@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse from seaserv import seafile_api from seahub.test_utils import BaseTestCase - +from seahub.utils import normalize_dir_path from tests.common.utils import randstring @@ -61,7 +61,7 @@ class RepoCommitDirTest(BaseTestCase): assert json_resp['dirent_list'][0] assert json_resp['dirent_list'][0]['type'] == 'file' assert json_resp['dirent_list'][0]['name'] == self.inner_file_name - assert json_resp['dirent_list'][0]['parent_dir'] == self.folder_path + assert json_resp['dirent_list'][0]['parent_dir'] == normalize_dir_path(self.folder_path) assert json_resp['dirent_list'][0]['size'] == 0 # test can get without path @@ -74,11 +74,13 @@ class RepoCommitDirTest(BaseTestCase): assert json_resp['dirent_list'][0]['type'] == 'dir' assert json_resp['dirent_list'][0]['name'] == self.folder_name assert json_resp['dirent_list'][0]['parent_dir'] == '/' - assert json_resp['dirent_list'][0].get('size') is None + assert json_resp['dirent_list'][0]['obj_id'] + assert json_resp['dirent_list'][1] assert json_resp['dirent_list'][1]['type'] == 'file' assert json_resp['dirent_list'][1]['name'] == self.file_name assert json_resp['dirent_list'][1]['parent_dir'] == '/' + assert json_resp['dirent_list'][0]['obj_id'] assert json_resp['dirent_list'][1]['size'] == 0 # test_can_not_get_with_invalid_path_parameter