On 16/05/07, Karl Hasselström <kha@xxxxxxxxxxx> wrote:
On 2007-05-15 21:01:43 +0100, Catalin Marinas wrote: > What is the impact on the bash completion for calling StGIT rather > than reading those files? Is it visible? Yes, it's visible, but not annoying (to me anyway). The overhead is akin to the overhead we used to have when "stg help" generated the command names -- on the order of 100-200 ms, when StGIT is in the cache. The expensive part is to start stgit; the git calls are cheap. So theoretically the completion script could duplicate the logic in StGIT and avoid most of the overhead, if someone wanted it badly enough.
I did a quick test of 'stg series' with the DAG patches applied, on a Linux kernel repository ('du -sh .git' is 285M) with 42 patches (only 25 applied). It constantly takes over 2 seconds to complete (compared to < 200ms without the DAG patches). The problem is that this delay will happen for bash completion as well. It seems that most of the time is spent in git._output_lines() called from stack.read_refs() (for git-show-ref). I attach the profiling output generated by stg-prof. -- Catalin
+ cross-arm + init-err + ll-printk + compressed-head-stack + armv7-uncompress + armv7-tlb + armv7-xenon + armv7-vfpv3 + armv7-neon + armv7-thumb2-user + pb926-pci-io + mpcore-smsc911x + smsc911x-driver + realview-eb-pci-mem + realview-eb-pci-io + nommu-consistent-api + nommu-fault + nommu-page-tlb + nommu-context-id + nommu-integrator + nommu-realview-eb + nommu-kconfig + nommu-ptrace + nommu-armv6 > nommu-armv7 - per-cpu-asids - arch-dsb-mmiowb - t2-arch-arm-clone - t2-function-type - t2-exception-handling - t2-unified-syntax - t2-exception-handling-alternative - t2-srs-variant - thumb2-kernel-port - errata-arm1136-364296 - errata-arm1136-411920 - pipt-icache-flush - smp-writealloc 3150 function calls (3112 primitive calls) in 2.229 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 2.229 2.229 <string>:1(?) 1 0.000 0.000 0.000 0.000 ConfigParser.py:105(Error) 1 0.000 0.000 0.000 0.000 ConfigParser.py:117(NoSectionError) 1 0.000 0.000 0.000 0.000 ConfigParser.py:124(DuplicateSectionError) 1 0.000 0.000 0.000 0.000 ConfigParser.py:131(NoOptionError) 1 0.000 0.000 0.000 0.000 ConfigParser.py:140(InterpolationError) 1 0.000 0.000 0.000 0.000 ConfigParser.py:148(InterpolationMissingOptionError) 1 0.000 0.000 0.000 0.000 ConfigParser.py:161(InterpolationSyntaxError) 1 0.000 0.000 0.000 0.000 ConfigParser.py:165(InterpolationDepthError) 1 0.000 0.000 0.000 0.000 ConfigParser.py:176(ParsingError) 1 0.000 0.000 0.000 0.000 ConfigParser.py:188(MissingSectionHeaderError) 1 0.000 0.000 0.009 0.009 ConfigParser.py:202(RawConfigParser) 1 0.000 0.000 0.000 0.000 ConfigParser.py:487(ConfigParser) 1 0.000 0.000 0.002 0.002 ConfigParser.py:570(SafeConfigParser) 1 0.000 0.000 0.011 0.011 ConfigParser.py:88(?) 1 0.000 0.000 0.000 0.000 UserDict.py:19(__getitem__) 1 0.000 0.000 0.000 0.000 UserDict.py:62(__contains__) 1 0.000 0.000 0.000 0.000 basedir.py:2(?) 1 0.007 0.007 0.007 0.007 basedir.py:23(__output) 1 0.000 0.000 0.007 0.007 basedir.py:33(get) 1 0.003 0.003 0.011 0.011 common.py:2(?) 1 0.000 0.000 0.000 0.000 common.py:32(CmdException) 1 0.000 0.000 0.000 0.000 common.py:37(RevParseException) 1 0.000 0.000 0.006 0.006 config.py:125(config_setup) 1 0.000 0.000 0.000 0.000 config.py:134(ConfigOption) 2 0.000 0.000 0.000 0.000 config.py:137(__init__) 1 0.000 0.000 0.000 0.000 config.py:2(?) 1 0.000 0.000 0.000 0.000 config.py:24(GitConfigException) 1 0.000 0.000 0.000 0.000 config.py:27(GitConfig) 1 0.006 0.006 0.006 0.006 config.py:65(get) 1 0.005 0.005 0.023 0.023 git.py:180(_output_one_line) 2 2.029 1.015 2.067 1.034 git.py:192(_output_lines) 1 0.002 0.002 0.003 0.003 git.py:2(?) 1 0.000 0.000 0.023 0.023 git.py:288(get_head_file) 1 0.000 0.000 0.000 0.000 git.py:30(GitException) 1 0.000 0.000 0.000 0.000 git.py:39(Person) 1 0.000 0.000 0.000 0.000 git.py:71(Commit) 1 0.000 0.000 0.000 0.000 gitmergeonefile.py:2(?) 1 0.000 0.000 0.000 0.000 gitmergeonefile.py:27(GitMergeException) 1 0.001 0.001 2.228 2.228 main.py:197(main) 1 0.000 0.000 0.000 0.000 main.py:32(canonical_cmd) 1 0.000 0.000 0.015 0.015 main.py:51(__getitem__) 1 0.000 0.000 0.000 0.000 optparse.py:1007(_create_option_list) 1 0.000 0.000 0.001 0.001 optparse.py:1012(_populate_option_list) 1 0.000 0.000 0.000 0.000 optparse.py:1022(_init_parsing_state) 1 0.000 0.000 0.000 0.000 optparse.py:1036(set_usage) 1 0.000 0.000 0.000 0.000 optparse.py:1059(get_default_values) 1 0.000 0.000 0.000 0.000 optparse.py:1091(_get_args) 1 0.000 0.000 0.000 0.000 optparse.py:1097(parse_args) 1 0.000 0.000 0.000 0.000 optparse.py:1136(check_values) 1 0.000 0.000 0.000 0.000 optparse.py:1149(_process_args) 1 0.000 0.000 0.000 0.000 optparse.py:140(__init__) 1 0.000 0.000 0.000 0.000 optparse.py:247(__init__) 12 0.001 0.000 0.002 0.000 optparse.py:413(__init__) 12 0.000 0.000 0.000 0.000 optparse.py:432(_check_opt_strings) 12 0.000 0.000 0.000 0.000 optparse.py:441(_set_opt_strings) 12 0.000 0.000 0.000 0.000 optparse.py:462(_set_attrs) 12 0.000 0.000 0.000 0.000 optparse.py:480(_check_action) 12 0.000 0.000 0.000 0.000 optparse.py:486(_check_type) 12 0.000 0.000 0.000 0.000 optparse.py:504(_check_choice) 12 0.000 0.000 0.000 0.000 optparse.py:517(_check_dest) 12 0.000 0.000 0.000 0.000 optparse.py:528(_check_const) 12 0.000 0.000 0.000 0.000 optparse.py:534(_check_nargs) 12 0.000 0.000 0.000 0.000 optparse.py:543(_check_callback) 1 0.000 0.000 0.000 0.000 optparse.py:662(__init__) 1 0.000 0.000 0.000 0.000 optparse.py:748(__init__) 1 0.000 0.000 0.000 0.000 optparse.py:759(_create_option_mappings) 1 0.000 0.000 0.000 0.000 optparse.py:775(set_conflict_handler) 1 0.000 0.000 0.000 0.000 optparse.py:780(set_description) 13 0.000 0.000 0.000 0.000 optparse.py:786(_check_conflict) 13 0.000 0.000 0.001 0.000 optparse.py:815(add_option) 1 0.000 0.000 0.001 0.001 optparse.py:845(add_options) 1 0.000 0.000 0.001 0.001 optparse.py:975(__init__) 1 0.000 0.000 0.000 0.000 os.py:444(__setitem__) 4 0.000 0.000 0.000 0.000 popen2.py:21(_cleanup) 1 0.000 0.000 0.000 0.000 popen2.py:25(Popen3) 4 0.064 0.016 0.064 0.016 popen2.py:31(__init__) 1 0.000 0.000 0.000 0.000 popen2.py:7(?) 3 0.000 0.000 0.000 0.000 popen2.py:87(wait) 1 0.000 0.000 0.000 0.000 popen2.py:97(Popen4) 1 0.000 0.000 0.000 0.000 posixpath.py:110(basename) 5 0.000 0.000 0.000 0.000 posixpath.py:184(isdir) 4 0.000 0.000 0.000 0.000 posixpath.py:197(isfile) 8 0.000 0.000 0.000 0.000 posixpath.py:56(join) 1 0.000 0.000 0.000 0.000 posixpath.py:74(split) 1 0.000 0.000 2.229 2.229 profile:0(main()) 0 0.000 0.000 profile:0(profiler) 1 0.001 0.001 2.163 2.163 series.py:111(func) 1 0.001 0.001 0.015 0.015 series.py:2(?) 38 0.001 0.000 0.001 0.000 series.py:88(__print_patch) 46 0.000 0.000 0.000 0.000 sets.py:119(__iter__) 1 0.000 0.000 0.000 0.000 sets.py:356(_update) 1 0.000 0.000 0.000 0.000 sets.py:393(ImmutableSet) 1 0.001 0.001 0.001 0.001 sets.py:41(?) 1 0.000 0.000 0.000 0.000 sets.py:418(Set) 72 0.001 0.000 0.001 0.000 sets.py:425(__init__) 89 0.001 0.000 0.001 0.000 sets.py:515(add) 25 0.000 0.000 0.000 0.000 sets.py:528(remove) 1 0.000 0.000 0.000 0.000 sets.py:564(_TemporarilyImmutableSet) 1 0.000 0.000 0.000 0.000 sets.py:83(BaseSet) 26 0.000 0.000 0.000 0.000 sets.py:99(__len__) 1 0.000 0.000 0.000 0.000 shutil.py:16(Error) 1 0.000 0.000 0.000 0.000 shutil.py:5(?) 896 0.017 0.000 0.028 0.000 sre.py:129(match) 4 0.000 0.000 0.013 0.003 sre.py:177(compile) 900 0.012 0.000 0.025 0.000 sre.py:216(_compile) 5 0.000 0.000 0.001 0.000 sre_compile.py:151(_compile_charset) 5 0.000 0.000 0.000 0.000 sre_compile.py:180(_optimize_charset) 17/4 0.001 0.000 0.002 0.001 sre_compile.py:24(_compile) 7 0.000 0.000 0.000 0.000 sre_compile.py:324(_simple) 4 0.000 0.000 0.001 0.000 sre_compile.py:331(_compile_info) 12 0.000 0.000 0.000 0.000 sre_compile.py:42(<lambda>) 8 0.000 0.000 0.000 0.000 sre_compile.py:440(isstring) 4 0.000 0.000 0.004 0.001 sre_compile.py:446(_code) 4 0.000 0.000 0.013 0.003 sre_compile.py:461(compile) 32 0.000 0.000 0.000 0.000 sre_parse.py:133(__len__) 51 0.000 0.000 0.000 0.000 sre_parse.py:137(__getitem__) 7 0.000 0.000 0.000 0.000 sre_parse.py:139(__setitem__) 7 0.000 0.000 0.000 0.000 sre_parse.py:141(__getslice__) 44 0.000 0.000 0.000 0.000 sre_parse.py:145(append) 24/11 0.001 0.000 0.001 0.000 sre_parse.py:147(getwidth) 4 0.000 0.000 0.000 0.000 sre_parse.py:183(__init__) 125 0.001 0.000 0.001 0.000 sre_parse.py:187(__next) 59 0.001 0.000 0.001 0.000 sre_parse.py:200(match) 98 0.002 0.000 0.003 0.000 sre_parse.py:206(get) 23 0.000 0.000 0.000 0.000 sre_parse.py:215(isident) 4 0.000 0.000 0.001 0.000 sre_parse.py:221(isname) 2 0.000 0.000 0.000 0.000 sre_parse.py:240(_class_escape) 6 0.000 0.000 0.000 0.000 sre_parse.py:269(_escape) 10/4 0.000 0.000 0.008 0.002 sre_parse.py:312(_parse_sub) 10/4 0.003 0.000 0.008 0.002 sre_parse.py:367(_parse) 4 0.000 0.000 0.009 0.002 sre_parse.py:614(parse) 4 0.000 0.000 0.000 0.000 sre_parse.py:75(__init__) 6 0.000 0.000 0.000 0.000 sre_parse.py:80(opengroup) 6 0.000 0.000 0.000 0.000 sre_parse.py:91(closegroup) 17 0.000 0.000 0.000 0.000 sre_parse.py:98(__init__) 1 0.000 0.000 0.000 0.000 stack.py:112(StgitObject) 1 0.000 0.000 0.000 0.000 stack.py:115(_set_dir) 6 0.000 0.000 0.000 0.000 stack.py:117(_dir) 1 0.000 0.000 0.000 0.000 stack.py:142(Patch) 1 0.004 0.004 0.008 0.008 stack.py:2(?) 1 0.000 0.000 0.000 0.000 stack.py:277(PatchorderCache) 1 0.000 0.000 0.000 0.000 stack.py:280(__init__) 1 0.000 0.000 0.000 0.000 stack.py:283(__invalidate) 59 0.001 0.000 0.001 0.000 stack.py:286(__cache) 2 0.000 0.000 0.000 0.000 stack.py:293(read_file) 1 0.000 0.000 0.000 0.000 stack.py:30(StackException) 59 0.005 0.000 0.007 0.000 stack.py:315(cmp) 1 0.014 0.014 0.110 0.110 stack.py:327(read_refs) 1 0.000 0.000 0.000 0.000 stack.py:33(FilterUntil) 1 0.002 0.002 2.006 2.006 stack.py:342(unapplied_patches) 1 0.026 0.026 0.037 0.037 stack.py:358(sort_applied_patches) 1 0.000 0.000 0.000 0.000 stack.py:382(AppliedCache) 1 0.000 0.000 0.000 0.000 stack.py:385(__init__) 2 0.000 0.000 2.161 1.080 stack.py:389(get_applied) 1 0.000 0.000 0.000 0.000 stack.py:392(get_unapplied) 1 0.000 0.000 0.000 0.000 stack.py:417(__invalidate) 3 0.000 0.000 0.000 0.000 stack.py:420(__cached) 3 0.001 0.000 2.161 0.720 stack.py:422(__cache) 1 0.000 0.000 0.000 0.000 stack.py:434(Series) 1 0.000 0.000 0.031 0.031 stack.py:437(__init__) 1 0.000 0.000 0.000 0.000 stack.py:479(get_branch) 1 0.000 0.000 0.000 0.000 stack.py:497(get_current) 2 0.000 0.000 2.161 1.080 stack.py:507(get_applied) 1 0.000 0.000 0.000 0.000 stack.py:510(get_unapplied) 1 0.000 0.000 0.000 0.000 stack.py:513(get_hidden) 2 0.000 0.000 0.000 0.000 stack.py:646(is_initialised) 8 0.000 0.000 0.000 0.000 stat.py:29(S_IFMT) 5 0.000 0.000 0.000 0.000 stat.py:45(S_ISDIR) 3 0.000 0.000 0.000 0.000 stat.py:54(S_ISREG) 1 0.000 0.000 0.000 0.000 templates.py:2(?) 1 0.000 0.000 0.000 0.000 utils.py:107(strip_prefix) 1 0.000 0.000 0.000 0.000 utils.py:153(EditorException) 1 0.001 0.001 0.001 0.001 utils.py:2(?) Ordered by: standard name Function called... <string>:1(?) main.py:197(main)(1) 2.228 ConfigParser.py:105(Error) -- ConfigParser.py:117(NoSectionError) -- ConfigParser.py:124(DuplicateSectionError) -- ConfigParser.py:131(NoOptionError) -- ConfigParser.py:140(InterpolationError) -- ConfigParser.py:148(InterpolationMissingOptionError) -- ConfigParser.py:161(InterpolationSyntaxError) -- ConfigParser.py:165(InterpolationDepthError) -- ConfigParser.py:176(ParsingError) -- ConfigParser.py:188(MissingSectionHeaderError) -- ConfigParser.py:202(RawConfigParser) sre.py:177(compile)(2) 0.013 ConfigParser.py:487(ConfigParser) -- ConfigParser.py:570(SafeConfigParser) sre.py:177(compile)(1) 0.013 ConfigParser.py:88(?) ConfigParser.py:105(Error)(1) 0.000 ConfigParser.py:117(NoSectionError)(1) 0.000 ConfigParser.py:124(DuplicateSectionError)(1) 0.000 ConfigParser.py:131(NoOptionError)(1) 0.000 ConfigParser.py:140(InterpolationError)(1) 0.000 ConfigParser.py:148(InterpolationMissingOptionError)(1) 0.000 ConfigParser.py:161(InterpolationSyntaxError)(1) 0.000 ConfigParser.py:165(InterpolationDepthError)(1) 0.000 ConfigParser.py:176(ParsingError)(1) 0.000 ConfigParser.py:188(MissingSectionHeaderError)(1) 0.000 ConfigParser.py:202(RawConfigParser)(1) 0.009 ConfigParser.py:487(ConfigParser)(1) 0.000 ConfigParser.py:570(SafeConfigParser)(1) 0.002 UserDict.py:19(__getitem__) -- UserDict.py:62(__contains__) -- basedir.py:2(?) -- basedir.py:23(__output) -- basedir.py:33(get) UserDict.py:62(__contains__)(1) 0.000 basedir.py:23(__output)(1) 0.007 common.py:2(?) common.py:32(CmdException)(1) 0.000 common.py:37(RevParseException)(1) 0.000 stack.py:2(?)(1) 0.008 utils.py:2(?)(1) 0.001 common.py:32(CmdException) -- common.py:37(RevParseException) -- config.py:125(config_setup) config.py:65(get)(1) 0.006 os.py:444(__setitem__)(1) 0.000 config.py:134(ConfigOption) -- config.py:137(__init__) -- config.py:2(?) basedir.py:2(?)(1) 0.000 config.py:24(GitConfigException)(1) 0.000 config.py:27(GitConfig)(1) 0.000 config.py:134(ConfigOption)(1) 0.000 config.py:24(GitConfigException) -- config.py:27(GitConfig) -- config.py:65(get) -- git.py:180(_output_one_line) popen2.py:31(__init__)(1) 0.064 popen2.py:87(wait)(1) 0.000 git.py:192(_output_lines) popen2.py:31(__init__)(2) 0.064 popen2.py:87(wait)(2) 0.000 git.py:2(?) git.py:30(GitException)(1) 0.000 git.py:39(Person)(1) 0.000 git.py:71(Commit)(1) 0.000 gitmergeonefile.py:2(?)(1) 0.000 sets.py:41(?)(1) 0.001 shutil.py:5(?)(1) 0.000 git.py:288(get_head_file) git.py:180(_output_one_line)(1) 0.023 utils.py:107(strip_prefix)(1) 0.000 git.py:30(GitException) -- git.py:39(Person) -- git.py:71(Commit) -- gitmergeonefile.py:2(?) config.py:137(__init__)(2) 0.000 gitmergeonefile.py:27(GitMergeException)(1) 0.000 gitmergeonefile.py:27(GitMergeException) -- main.py:197(main) ConfigParser.py:88(?)(1) 0.011 UserDict.py:19(__getitem__)(1) 0.000 config.py:125(config_setup)(1) 0.006 main.py:32(canonical_cmd)(1) 0.000 main.py:51(__getitem__)(1) 0.015 optparse.py:975(__init__)(1) 0.001 optparse.py:1097(parse_args)(1) 0.000 posixpath.py:110(basename)(1) 0.000 series.py:111(func)(1) 2.163 stack.py:437(__init__)(1) 0.031 main.py:32(canonical_cmd) -- main.py:51(__getitem__) series.py:2(?)(1) 0.015 optparse.py:1007(_create_option_list) optparse.py:759(_create_option_mappings)(1) 0.000 optparse.py:1012(_populate_option_list) optparse.py:815(add_option)(1) 0.001 optparse.py:845(add_options)(1) 0.001 optparse.py:1022(_init_parsing_state) -- optparse.py:1036(set_usage) -- optparse.py:1059(get_default_values) optparse.py:662(__init__)(1) 0.000 optparse.py:1091(_get_args) -- optparse.py:1097(parse_args) optparse.py:1059(get_default_values)(1) 0.000 optparse.py:1091(_get_args)(1) 0.000 optparse.py:1136(check_values)(1) 0.000 optparse.py:1149(_process_args)(1) 0.000 optparse.py:1136(check_values) -- optparse.py:1149(_process_args) -- optparse.py:140(__init__) -- optparse.py:247(__init__) optparse.py:140(__init__)(1) 0.000 optparse.py:413(__init__) optparse.py:432(_check_opt_strings)(12) 0.000 optparse.py:441(_set_opt_strings)(12) 0.000 optparse.py:462(_set_attrs)(12) 0.000 optparse.py:480(_check_action)(12) 0.000 optparse.py:486(_check_type)(12) 0.000 optparse.py:504(_check_choice)(12) 0.000 optparse.py:517(_check_dest)(12) 0.000 optparse.py:528(_check_const)(12) 0.000 optparse.py:534(_check_nargs)(12) 0.000 optparse.py:543(_check_callback)(12) 0.000 optparse.py:432(_check_opt_strings) -- optparse.py:441(_set_opt_strings) -- optparse.py:462(_set_attrs) -- optparse.py:480(_check_action) -- optparse.py:486(_check_type) -- optparse.py:504(_check_choice) -- optparse.py:517(_check_dest) -- optparse.py:528(_check_const) -- optparse.py:534(_check_nargs) -- optparse.py:543(_check_callback) -- optparse.py:662(__init__) -- optparse.py:748(__init__) optparse.py:775(set_conflict_handler)(1) 0.000 optparse.py:780(set_description)(1) 0.000 optparse.py:1007(_create_option_list)(1) 0.000 optparse.py:759(_create_option_mappings) -- optparse.py:775(set_conflict_handler) -- optparse.py:780(set_description) -- optparse.py:786(_check_conflict) -- optparse.py:815(add_option) optparse.py:786(_check_conflict)(13) 0.000 optparse.py:845(add_options) optparse.py:815(add_option)(12) 0.001 optparse.py:975(__init__) optparse.py:247(__init__)(1) 0.000 optparse.py:748(__init__)(1) 0.000 optparse.py:1012(_populate_option_list)(1) 0.001 optparse.py:1022(_init_parsing_state)(1) 0.000 optparse.py:1036(set_usage)(1) 0.000 os.py:444(__setitem__) -- popen2.py:21(_cleanup) -- popen2.py:25(Popen3) -- popen2.py:31(__init__) popen2.py:21(_cleanup)(4) 0.000 popen2.py:7(?) popen2.py:25(Popen3)(1) 0.000 popen2.py:97(Popen4)(1) 0.000 popen2.py:87(wait) -- popen2.py:97(Popen4) -- posixpath.py:110(basename) posixpath.py:74(split)(1) 0.000 posixpath.py:184(isdir) stat.py:45(S_ISDIR)(5) 0.000 posixpath.py:197(isfile) stat.py:54(S_ISREG)(3) 0.000 posixpath.py:56(join) -- posixpath.py:74(split) -- profile:0(main()) <string>:1(?)(1) 2.229 profile:0(profiler) profile:0(main())(1) 2.229 series.py:111(func) series.py:88(__print_patch)(38) 0.001 stack.py:497(get_current)(1) 0.000 stack.py:507(get_applied)(1) 2.161 stack.py:510(get_unapplied)(1) 0.000 stack.py:513(get_hidden)(1) 0.000 series.py:2(?) common.py:2(?)(1) 0.011 optparse.py:413(__init__)(12) 0.002 series.py:88(__print_patch) -- sets.py:119(__iter__) -- sets.py:356(_update) -- sets.py:393(ImmutableSet) -- sets.py:41(?) sets.py:83(BaseSet)(1) 0.000 sets.py:393(ImmutableSet)(1) 0.000 sets.py:418(Set)(1) 0.000 sets.py:564(_TemporarilyImmutableSet)(1) 0.000 sets.py:418(Set) -- sets.py:425(__init__) sets.py:356(_update)(1) 0.000 sets.py:515(add) -- sets.py:528(remove) -- sets.py:564(_TemporarilyImmutableSet) -- sets.py:83(BaseSet) -- sets.py:99(__len__) -- shutil.py:16(Error) -- shutil.py:5(?) shutil.py:16(Error)(1) 0.000 sre.py:129(match) sre.py:216(_compile)(896) 0.025 sre.py:177(compile) sre.py:216(_compile)(4) 0.025 sre.py:216(_compile) sre_compile.py:440(isstring)(4) 0.000 sre_compile.py:461(compile)(4) 0.013 sre_compile.py:151(_compile_charset) sre_compile.py:42(<lambda>)(6) 0.000 sre_compile.py:180(_optimize_charset)(5) 0.000 sre_compile.py:180(_optimize_charset) sre_compile.py:42(<lambda>)(6) 0.000 sre_compile.py:24(_compile) sre_compile.py:24(_compile)(13) 0.002 sre_compile.py:151(_compile_charset)(5) 0.001 sre_compile.py:324(_simple)(7) 0.000 sre_parse.py:137(__getitem__)(27) 0.000 sre_compile.py:324(_simple) sre_parse.py:137(__getitem__)(7) 0.000 sre_parse.py:147(getwidth)(7) 0.001 sre_compile.py:331(_compile_info) sre_parse.py:133(__len__)(4) 0.000 sre_parse.py:137(__getitem__)(3) 0.000 sre_parse.py:147(getwidth)(4) 0.001 sre_compile.py:42(<lambda>) -- sre_compile.py:440(isstring) -- sre_compile.py:446(_code) sre_compile.py:24(_compile)(4) 0.002 sre_compile.py:331(_compile_info)(4) 0.001 sre_compile.py:461(compile) sre_compile.py:440(isstring)(4) 0.000 sre_compile.py:446(_code)(4) 0.004 sre_parse.py:614(parse)(4) 0.009 sre_parse.py:133(__len__) -- sre_parse.py:137(__getitem__) -- sre_parse.py:139(__setitem__) -- sre_parse.py:141(__getslice__) sre_parse.py:98(__init__)(7) 0.000 sre_parse.py:145(append) -- sre_parse.py:147(getwidth) sre_parse.py:147(getwidth)(13) 0.001 sre_parse.py:183(__init__) sre_parse.py:187(__next)(4) 0.001 sre_parse.py:187(__next) -- sre_parse.py:200(match) sre_parse.py:187(__next)(23) 0.001 sre_parse.py:206(get) sre_parse.py:187(__next)(98) 0.001 sre_parse.py:215(isident) -- sre_parse.py:221(isname) sre_parse.py:215(isident)(23) 0.000 sre_parse.py:240(_class_escape) -- sre_parse.py:269(_escape) -- sre_parse.py:312(_parse_sub) sre_parse.py:200(match)(16) 0.001 sre_parse.py:367(_parse)(10) 0.008 sre_parse.py:367(_parse) sre_parse.py:80(opengroup)(6) 0.000 sre_parse.py:91(closegroup)(6) 0.000 sre_parse.py:98(__init__)(10) 0.000 sre_parse.py:133(__len__)(28) 0.000 sre_parse.py:137(__getitem__)(14) 0.000 sre_parse.py:139(__setitem__)(7) 0.000 sre_parse.py:141(__getslice__)(7) 0.000 sre_parse.py:145(append)(44) 0.000 sre_parse.py:200(match)(43) 0.001 sre_parse.py:206(get)(94) 0.003 sre_parse.py:221(isname)(4) 0.001 sre_parse.py:240(_class_escape)(2) 0.000 sre_parse.py:269(_escape)(6) 0.000 sre_parse.py:312(_parse_sub)(6) 0.008 sre_parse.py:614(parse) sre_parse.py:75(__init__)(4) 0.000 sre_parse.py:183(__init__)(4) 0.000 sre_parse.py:206(get)(4) 0.003 sre_parse.py:312(_parse_sub)(4) 0.008 sre_parse.py:75(__init__) -- sre_parse.py:80(opengroup) -- sre_parse.py:91(closegroup) -- sre_parse.py:98(__init__) -- stack.py:112(StgitObject) -- stack.py:115(_set_dir) -- stack.py:117(_dir) -- stack.py:142(Patch) -- stack.py:2(?) git.py:2(?)(1) 0.003 popen2.py:7(?)(1) 0.000 stack.py:30(StackException)(1) 0.000 stack.py:33(FilterUntil)(1) 0.000 stack.py:112(StgitObject)(1) 0.000 stack.py:142(Patch)(1) 0.000 stack.py:277(PatchorderCache)(1) 0.000 stack.py:382(AppliedCache)(1) 0.000 stack.py:434(Series)(1) 0.000 templates.py:2(?)(1) 0.000 stack.py:277(PatchorderCache) -- stack.py:280(__init__) stack.py:283(__invalidate)(1) 0.000 stack.py:283(__invalidate) -- stack.py:286(__cache) posixpath.py:56(join)(3) 0.000 posixpath.py:197(isfile)(3) 0.000 stack.py:117(_dir)(3) 0.000 stack.py:293(read_file)(2) 0.000 stack.py:293(read_file) -- stack.py:30(StackException) -- stack.py:315(cmp) stack.py:286(__cache)(59) 0.001 stack.py:327(read_refs) git.py:192(_output_lines)(1) 2.067 sre.py:129(match)(896) 0.028 sre.py:177(compile)(1) 0.013 stack.py:33(FilterUntil) -- stack.py:342(unapplied_patches) git.py:192(_output_lines)(1) 2.067 sets.py:119(__iter__)(19) 0.000 sets.py:425(__init__)(46) 0.001 sets.py:515(add)(64) 0.001 stack.py:358(sort_applied_patches) popen2.py:31(__init__)(1) 0.064 sets.py:99(__len__)(26) 0.000 sets.py:119(__iter__)(25) 0.000 sets.py:425(__init__)(26) 0.001 sets.py:515(add)(25) 0.001 sets.py:528(remove)(25) 0.000 stack.py:382(AppliedCache) -- stack.py:385(__init__) stack.py:280(__init__)(1) 0.000 stack.py:417(__invalidate)(1) 0.000 stack.py:389(get_applied) stack.py:422(__cache)(2) 2.161 stack.py:392(get_unapplied) stack.py:422(__cache)(1) 2.161 stack.py:417(__invalidate) -- stack.py:420(__cached) -- stack.py:422(__cache) sets.py:119(__iter__)(2) 0.000 stack.py:315(cmp)(59) 0.007 stack.py:327(read_refs)(1) 0.110 stack.py:342(unapplied_patches)(1) 2.006 stack.py:358(sort_applied_patches)(1) 0.037 stack.py:420(__cached)(3) 0.000 stack.py:479(get_branch)(1) 0.000 stack.py:434(Series) -- stack.py:437(__init__) basedir.py:33(get)(1) 0.007 git.py:288(get_head_file)(1) 0.023 posixpath.py:56(join)(5) 0.000 posixpath.py:184(isdir)(3) 0.000 stack.py:115(_set_dir)(1) 0.000 stack.py:117(_dir)(3) 0.000 stack.py:385(__init__)(1) 0.000 stack.py:646(is_initialised)(2) 0.000 stack.py:479(get_branch) -- stack.py:497(get_current) stack.py:507(get_applied)(1) 2.161 stack.py:507(get_applied) stack.py:389(get_applied)(2) 2.161 stack.py:510(get_unapplied) stack.py:392(get_unapplied)(1) 0.000 stack.py:513(get_hidden) posixpath.py:197(isfile)(1) 0.000 stack.py:646(is_initialised) posixpath.py:184(isdir)(2) 0.000 stat.py:29(S_IFMT) -- stat.py:45(S_ISDIR) stat.py:29(S_IFMT)(5) 0.000 stat.py:54(S_ISREG) stat.py:29(S_IFMT)(3) 0.000 templates.py:2(?) -- utils.py:107(strip_prefix) -- utils.py:153(EditorException) -- utils.py:2(?) config.py:2(?)(1) 0.000 utils.py:153(EditorException)(1) 0.000