def gen_stats(root, project, interesting, not_interesting, options): """ root: the root svn url of the project we are generating stats for (does not need to be the root of the svn repo). Must be a url, not a checkout path. project: the project identifier. interesting: regular expressions that indicate an interesting path if they match not_interesting: regular expressions that trump interesting and indicate a path is not interesting. options: currently unused, options from gen_file_stats.py's main. Yields FileData objects encoded as tsv lines. Only the fname, dev_experience and cnt_lines fields are filled in. """ client = pysvn.Client() # we need the repo root because the paths returned by svn ls are relative to the repo root, # not our project root repo_root = client.root_url_from_path(root) interesting_fs = [ f[0].repos_path for f in client.list(root, recurse=True) if is_interesting(f[0].repos_path, interesting, not_interesting) and f[0].kind == pysvn.node_kind.file ] for f in interesting_fs: dev_experience = parse_dev_experience(f, client, repo_root) if dev_experience: fd = FileData(':'.join([project, f])) # don't take revisions that are 0 lines added and 0 removed, like properties fd.dev_experience = [(dev, added, removed) for dev, added, removed in dev_experience if added or removed] fd.cnt_lines = count_lines(f, client, repo_root) fd_line = fd.as_line() if fd_line.strip(): yield fd_line
def gen_stats(root, project, interesting, not_interesting, options): """ root: the root svn url of the project we are generating stats for (does not need to be the root of the svn repo). Must be a url, not a checkout path. project: the project identifier. interesting: regular expressions that indicate an interesting path if they match not_interesting: regular expressions that trump interesting and indicate a path is not interesting. options: currently unused, options from gen_file_stats.py's main. Yields FileData objects encoded as tsv lines. Only the fname, dev_experience and cnt_lines fields are filled in. """ client = pysvn.Client() # we need the repo root because the paths returned by svn ls are relative to the repo root, # not our project root repo_root = client.root_url_from_path(root) interesting_fs = [f[0].repos_path for f in client.list(root, recurse=True) if is_interesting(f[0].repos_path, interesting, not_interesting) and f[0].kind == pysvn.node_kind.file] for f in interesting_fs: dev_experience = parse_dev_experience(f, client, repo_root) if dev_experience: fd = FileData(':'.join([project, f])) # don't take revisions that are 0 lines added and 0 removed, like properties fd.dev_experience = [(dev, added, removed) for dev, added, removed in dev_experience if added or removed] fd.cnt_lines = count_lines(f, client, repo_root) fd_line = fd.as_line() if fd_line.strip(): yield fd_line
def gen_stats(root, project, interesting, not_interesting, options): """ root: the path a local, git controlled-directory that is the root of this project project: the name of the project interesting: regular expressions that indicate an interesting path if they match not_interesting: regular expressions that trump interesting and indicate a path is not interesting. options: from gen_file_stats.py's main, currently only uses git_exe. Yields FileData objects encoded as tsv lines. Only the fname, dev_experience and cnt_lines fields are filled in. """ git_exe = options.git_exe # since git only works once you're in a git controlled path, we # need to get into one of those... prepare(root, git_exe) files = git_ls(root, git_exe) for f in files: if is_interesting(f, interesting, not_interesting): dev_experience = parse_dev_experience(f, git_exe) if dev_experience: fd = FileData(':'.join([project, f])) fd.dev_experience = dev_experience fd.cnt_lines = count_lines(f) fd_line = fd.as_line() if fd_line.strip(): yield fd_line