git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [StGIT PATCH] Don't use patches/<branch>/current

From
CMCatalin Marinas <catalin.marinas@gmail.com>
Date
May 16, 2007, 12:07 UTC
Message-ID
<b0943d9e0705160507h2b3c4a34xe9895d007c41d91a@mail.gmail.com>
In-Reply-To
<20070516071130.GB7453@diana.vm.bytemark.co.uk>
On 16/05/07, Karl Hasselström <kha@treskal.com> wrote:
Show 12 quoted lines
> 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
Previous: Karl HasselströmNext: Karl Hasselström
Message 9 of 36 in “Don't use patches/<branch>/current”
  1. Don't use patches/<branch>/currentKarl Hasselström, May 6, 2007
  2. Catalin MarinasMay 15, 2007
  3. Peter OberndorferMay 15, 2007
  4. Catalin MarinasMay 15, 2007
  5. Karl HasselströmMay 15, 2007
  6. Remove obsolete files when deleting a branchKarl Hasselström, May 15, 2007
  7. Catalin MarinasMay 15, 2007
  8. Karl HasselströmMay 16, 2007
  9. Catalin MarinasMay 16, 2007
  10. Karl HasselströmMay 16, 2007
  11. Karl HasselströmMay 16, 2007
  12. Catalin MarinasMay 17, 2007
  13. Karl HasselströmMay 17, 2007
  14. Catalin MarinasMay 17, 2007
  15. Karl HasselströmMay 18, 2007
  16. 0/6 New and improved DAG appliedness seriesKarl Hasselström, Jun 10, 2007
  17. 1/6 Verify patch status during the testKarl Hasselström, Jun 10, 2007
  18. 2/6 Make use of the get_patch() utility functionKarl Hasselström, Jun 10, 2007
  19. 3/6 Compute patch appliedness from commit DAGKarl Hasselström, Jun 10, 2007
  20. 4/6 Test the new DAG appliedness machineryKarl Hasselström, Jun 10, 2007
  21. 5/6 Fix bash completion after the DAG appliedness patchKarl Hasselström, Jun 10, 2007
  22. 6/6 Speed up the appliedness testKarl Hasselström, Jun 10, 2007
  23. Yann DirsonJun 30, 2007
  24. Karl HasselströmJul 1, 2007
  25. Yann DirsonMay 15, 2007
  26. Catalin MarinasMay 15, 2007
  27. Yann DirsonMay 15, 2007
  28. Karl HasselströmMay 16, 2007
  29. 0/5 Metadata format versioningKarl Hasselström, May 19, 2007
  30. 1/5 Fix config caching so that get, set, get worksKarl Hasselström, May 19, 2007
  31. 2/5 Have only a single command in each test_expect_failureKarl Hasselström, May 19, 2007
  32. 3/5 Upgrade old StGIT branches to new-format metadataKarl Hasselström, May 19, 2007
  33. 4/5 Test the format version upgrade codeKarl Hasselström, May 19, 2007
  34. 5/5 Add --binary flag to commands that generate diffsKarl Hasselström, May 19, 2007
  35. Catalin MarinasMay 22, 2007
  36. Karl HasselströmMay 22, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.