From: Catalin Marinas Date: Wed, 16 May 2007 12:07:14 GMT Subject: Re: [StGIT PATCH] Don't use patches//current Message-ID: In-Reply-To: <20070516071130.GB7453@diana.vm.bytemark.co.uk> On 16/05/07, Karl Hasselström 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 :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() 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... :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()) :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()(6) 0.000 sre_compile.py:180(_optimize_charset)(5) 0.000 sre_compile.py:180(_optimize_charset) sre_compile.py:42()(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() -- 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