ptags 0.1.3

A parallel universal-ctags wrapper for git repository
ptags-0.1.3 is not a library.
Visit the last successful build: ptags-0.3.5

ptags

A parallel universal-ctags wrapper for git repository

Build Status Crates.io

Description

ptags is a universal-ctags wrapper to have the following features.

  • Search git tracked files only ( .gitignore support )
  • Call ctags command in parallel for acceleration
    • About x4 faster than universal-ctags at large repository

Install

Download from release page, and extract to the directory in PATH.

Alternatively you can install by cargo.

cargo install ptags

Requirement

ptags uses ctags and git command internally. The tested version is below.

Command Version
ctags Universal Ctags 0.0.0(f9e6e3c1) / Exuberant Ctags 5.8
git git version 2.14.2

Usage

ptags 0.1.0
dalance@gmail.com
A parallel universal-ctags wrapper for git repository

USAGE:
    ptags [FLAGS] [OPTIONS] [--] [DIR]

FLAGS:
        --exclude-lfs          Exclude git-lfs tracked files
    -h, --help                 Prints help information
        --include-ignored      Include ignored files
        --include-submodule    Include submodule files
        --include-untracked    Include untracked files
    -s, --stat                 Show statistics
    -V, --version              Prints version information
    -v, --verbose              Verbose mode

OPTIONS:
        --bin-ctags <bin_ctags>           Path to ctags binary [default: ctags]
        --bin-git <bin_git>               Path to git binary [default: git]
    -c, --opt-ctags <opt_ctags>...        Options passed to ctags
    -g, --opt-git <opt_git>...            Options passed to git
        --opt-git-lfs <opt_git_lfs>...    Options passed to git-lfs
    -f, --file <output>                   Output filename [default: tags]
    -t, --thread <thread>                 Number of threads [default: 8]

ARGS:
    <DIR>    Search directory [default: .]

You can pass options to ctags by-c/--ctags_opt option like below.

ptags -c='--exclude=aaa/*' -c='--exclude=bbb/*'

Benchmark

Environment

  • CPU: Ryzen Threadripper 1950X
  • MEM: 128GB
  • OS : CentOS 7.4.1708

Data

Name Repository Revision Files Size[GB]
source1 https://github.com/llvm-mirror/llvm ddf9edb4020 29670 1.2
source2 https://github.com/torvalds/linux 071e31e254e0 52998 2.2
source3 https://github.com/chromium/chromium d79c68510b7e 293205 13

Result

ptags is about x4 faster than universal-ctags.

Command Version source1 source2 source3
ctags -R Universal Ctags 0.0.0(f9e6e3c1) 3.42s ( x1 ) 23.64s ( x1 ) 32.23 ( x1 )
ptags -t 16 ptags 0.1.0 0.78s ( x4.38 ) 5.94s ( x3.98 ) 8.76s ( x3.68 )