def link_repl(matchobj): op = matchobj.group(1) file_or_dir = matchobj.group(2) remaining = matchobj.group(3) tmp_str = '%s "<span class="file-name">%s</span>"' if remaining: url = reverse('api_repo_history_changes', args=[repo_id]) e.link = "%s?commit_id=%s" % (url, cmmt_id) e.dtime = api_tsstr_sec(commit.props.ctime) return (tmp_str + ' %s') % (op, file_or_dir, remaining) else: diff_result = seafserv_threaded_rpc.get_diff(repo_id, '', cmmt_id) if diff_result: for d in diff_result: if file_or_dir not in d.name: # skip to next diff_result if file/folder user clicked does not # match the diff_result continue if d.status == 'add' or d.status == 'mod': e.link = "api://repo/%s/files/?p=/%s" % (repo_id, d.name) elif d.status == 'mov': e.link = "api://repo/%s/files/?p=/%s" % (repo_id, d.new_name) elif d.status == 'newdir': e.link = "api://repo/%s/dir/?p=/%s" % (repo_id, d.name) else: continue return tmp_str % (op, file_or_dir)
def get_diff(repo_id, arg1, arg2): lists = { 'new': [], 'removed': [], 'renamed': [], 'modified': [], 'newdir': [], 'deldir': [] } diff_result = seafserv_threaded_rpc.get_diff(repo_id, arg1, arg2) if not diff_result: return lists for d in diff_result: if d.status == "add": lists['new'].append(fpath_to_link(repo_id, d.name)) elif d.status == "del": lists['removed'].append(escape(d.name)) elif d.status == "mov": lists['renamed'].append( escape(d.name) + " ==> " + fpath_to_link(repo_id, d.new_name)) elif d.status == "mod": lists['modified'].append(fpath_to_link(repo_id, d.name)) elif d.status == "newdir": lists['newdir'].append(fpath_to_link(repo_id, d.name, is_dir=True)) elif d.status == "deldir": lists['deldir'].append(escape(d.name)) return lists
def convert_cmmt_desc_link(request): """Return user to file/directory page based on the changes in commit. """ repo_id = request.GET.get('repo_id') cmmt_id = request.GET.get('cmmt_id') name = request.GET.get('nm') repo = get_repo(repo_id) if not repo: raise Http404 # perm check if check_folder_permission(request, repo_id, '/') is None: raise Http404 diff_result = seafserv_threaded_rpc.get_diff(repo_id, '', cmmt_id) if not diff_result: raise Http404 for d in diff_result: if name not in d.name: # skip to next diff_result if file/folder user clicked does not # match the diff_result continue if d.status == 'add' or d.status == 'mod': # Add or modify file return HttpResponseRedirect( reverse('view_lib_file', args=[repo_id, '/' + d.name])) elif d.status == 'mov': # Move or Rename non-empty file/folder if '/' in d.new_name: new_dir_name = d.new_name.split('/')[0] return HttpResponseRedirect( reverse('view_common_lib_dir', args=[repo_id, new_dir_name])) else: return HttpResponseRedirect( reverse('view_lib_file', args=[repo_id, '/' + d.new_name])) elif d.status == 'newdir': return HttpResponseRedirect( reverse('view_common_lib_dir', args=[repo_id, d.name.strip('/')])) else: continue # Empty file/foder rename will reach here. raise Http404
def convert_cmmt_desc_link(request): """Return user to file/directory page based on the changes in commit. """ repo_id = request.GET.get('repo_id') cmmt_id = request.GET.get('cmmt_id') name = request.GET.get('nm') repo = get_repo(repo_id) if not repo: raise Http404 # perm check if check_folder_permission(request, repo_id, '/') is None: raise Http404 diff_result = seafserv_threaded_rpc.get_diff(repo_id, '', cmmt_id) if not diff_result: raise Http404 for d in diff_result: if name not in d.name: # skip to next diff_result if file/folder user clicked does not # match the diff_result continue if d.status == 'add' or d.status == 'mod': # Add or modify file return HttpResponseRedirect( reverse('view_lib_file', args=[repo_id, '/' + d.name])) elif d.status == 'mov': # Move or Rename file return HttpResponseRedirect( reverse('view_lib_file', args=[repo_id, '/' + d.new_name])) elif d.status == 'newdir': return HttpResponseRedirect( reverse('view_common_lib_dir', args=[repo_id, d.name.strip('/')])) else: continue # Shoud never reach here. logger.warn('OUT OF CONTROL!') logger.warn('repo_id: %s, cmmt_id: %s, name: %s' % (repo_id, cmmt_id, name)) for d in diff_result: logger.warn('diff_result: %s' % (d.__dict__)) raise Http404
def get_diff_details(repo_id, commit1, commit2): result = defaultdict(list) diff_result = seafserv_threaded_rpc.get_diff(repo_id, commit1, commit2) if not diff_result: return result for d in diff_result: if d.status == 'add': result['added_files'].append(d.name) elif d.status == 'del': result['deleted_files'].append(d.name) elif d.status == 'mov': result['renamed_files'].extend((d.name, d.new_name)) elif d.status == 'mod': result['modified_files'].append(d.name) elif d.status == 'newdir': result['added_dirs'].append(d.name) elif d.status == 'deldir': result['deleted_dirs'].append(d.name) return result
def get_diff_details(repo_id, commit1, commit2): result = defaultdict(list) diff_result = seafserv_threaded_rpc.get_diff(repo_id, commit1, commit2) if not diff_result: return result for d in diff_result: if d.status == "add": result["added_files"].append(d.name) elif d.status == "del": result["deleted_files"].append(d.name) elif d.status == "mov": result["renamed_files"].extend((d.name, d.new_name)) elif d.status == "mod": result["modified_files"].append(d.name) elif d.status == "newdir": result["added_dirs"].append(d.name) elif d.status == "deldir": result["deleted_dirs"].append(d.name) return result
def get_diff(repo_id, arg1, arg2): lists = {'new': [], 'removed': [], 'renamed': [], 'modified': [], 'newdir': [], 'deldir': []} diff_result = seafserv_threaded_rpc.get_diff(repo_id, arg1, arg2) if not diff_result: return lists for d in diff_result: if d.status == "add": lists['new'].append(fpath_to_link(repo_id, d.name)) elif d.status == "del": lists['removed'].append(escape(d.name)) elif d.status == "mov": lists['renamed'].append(escape(d.name) + " ==> " + fpath_to_link(repo_id, d.new_name)) elif d.status == "mod": lists['modified'].append(fpath_to_link(repo_id, d.name)) elif d.status == "newdir": lists['newdir'].append(fpath_to_link(repo_id, d.name, is_dir=True)) elif d.status == "deldir": lists['deldir'].append(escape(d.name)) return lists
def get_diff(repo_id, arg1, arg2): """ Get diffs classified by modification type """ lists = { 'new': [], 'removed': [], 'renamed': [], 'modified': [], 'newdir': [], 'deldir': [] } diff_result = seafserv_threaded_rpc.get_diff(repo_id, arg1, arg2) if not diff_result: return lists for d in diff_result: if d.status == "add": lists['new'].append(d.name) elif d.status == "del": lists['removed'].append(d.name) elif d.status == "mov": lists['renamed'].append(d.name + " ==> " + d.new_name) elif d.status == "mod": lists['modified'].append(d.name) elif d.status == "newdir": lists['newdir'].append(d.name) elif d.status == "deldir": lists['deldir'].append(d.name) # clean empty lists lists = dict([(vkey, vdata) for vkey, vdata in lists.iteritems() if (vdata)]) return lists
def convert_cmmt_desc_link(request): """Return user to file/directory page based on the changes in commit. """ repo_id = request.GET.get('repo_id') cmmt_id = request.GET.get('cmmt_id') name = request.GET.get('nm') repo = get_repo(repo_id) if not repo: raise Http404 # perm check if check_folder_permission(request, repo_id, '/') is None: raise Http404 diff_result = seafserv_threaded_rpc.get_diff(repo_id, '', cmmt_id) if not diff_result: raise Http404 for d in diff_result: if name not in d.name: # skip to next diff_result if file/folder user clicked does not # match the diff_result continue if d.status == 'add' or d.status == 'mod': # Add or modify file return HttpResponseRedirect( reverse('view_lib_file', args=[repo_id, '/' + d.name])) elif d.status == 'mov': # Move or Rename non-empty file/folder if '/' in d.new_name: new_dir_name = d.new_name.split('/')[0] reverse_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % { 'repo_id': repo_id, 'path': new_dir_name } return HttpResponseRedirect(reverse_url) else: return HttpResponseRedirect( reverse('view_lib_file', args=[repo_id, '/' + d.new_name])) elif d.status == 'newdir': reverse_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % { 'repo_id': repo_id, 'path': d.name.strip('/') }, return HttpResponseRedirect(reverse_url) else: continue status_list = [d.status for d in diff_result] # Rename empty file/folder if len(status_list) == 2: if 'add' in status_list and 'del' in status_list: for d in diff_result: if d.status != 'add': continue return HttpResponseRedirect( reverse('view_lib_file', args=[repo_id, '/' + d.name])) if 'newdir' in status_list and 'deldir' in status_list: for d in diff_result: if d.status != 'newdir': continue return HttpResponseRedirect( reverse('view_common_lib_dir', args=[repo_id, d.name])) # Rename folder with empty files if len(status_list) > 2: if 'deldir' in status_list and 'add' in status_list: for d in diff_result: if d.status != 'add': continue new_dir = d.name.split('/')[0] return HttpResponseRedirect( reverse('view_common_lib_dir', args=[repo_id, new_dir])) raise Http404