Comments (8)
Hi, thanks for your report. I see that you've used gitchangelog
thoroughly and are using incremental generation. I get few feedback, and your report is coming at a right time : I have a new experimental version of gitchangelog
that needed some extensive performance/functionality testing.
Performance is important for me, and it really seems that there is room for improvements on this topic.
On hesperides
project, you are using incremental changelog and when running gitchangelog
with a fresh checkout (on commit aaac5e6), I get 2s
run, and the expected file gets changed as I feel it should. I'm using gitchangelog
3.0.4
.
I guess that you wanted a full changelog generation ? Can you tell me more how to reproduce your huge times at running gitchangelog
. The best would be a small bash
script.
from gitchangelog.
Please note, that cloning both of your git repositories and changing the provided .gitchangelog.rc
by resetting your output
to stdout
, and commenting out rev
to display all commits, running gitchangelog
will display the full templated changelog on stdout
in about 3s
on my computer.
I can confirm this on both python 2.7.8
and python 3.7.1
. Note that I'm running python on linux on a 2014 laptop computer.
from gitchangelog.
I am using gitchangelog
3.0.4 under Cygwin with Python 3.7.4 and git 2.21.0 (both installed through Cygwin)
I played a little bit with the code, and it seems that GitRepos.log
takes in average 0.2s to executes on my machine. And the 20 first lines of versions_data_iter
take 10s to execute.
I wonder if maybe the issue is that gitchangelog
starts a lot of shell processes, which may be time-expensive on my system
from gitchangelog.
Running a Windows 7 VM under Virtualbox, on hesperides
clone, output redirected to stdout and all revisions selected, gitchangelog
under Cygwin_NT-6.1
is taking 15s
... which is already way to much but still orders of magnitude faster than your install (you mentionned 3mn) taking into account that it is a windows VM with 1cpu and 768M of RAM.
Have you gone down the tracks along abnormal cygwin performance ?
from gitchangelog.
Probably :(
Another test I just made, using cProfile
:
# python3 -m cProfile /home/lucas_cimon/.local/lib/python3.7/site-packages/gitchangelog/gitchangelog.py
448106 function calls (445026 primitive calls) in 54.619 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.432 0.432 .gitchangelog.rc:9(<module>)
58/54 0.000 0.000 0.026 0.000 <frozen importlib._bootstrap>:1009(_handle_fromlist)
41 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:103(release)
35 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:143(__init__)
35 0.000 0.000 0.001 0.000 <frozen importlib._bootstrap>:147(__enter__)
35 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:151(__exit__)
41 0.000 0.000 0.001 0.000 <frozen importlib._bootstrap>:157(_get_module_lock)
35 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:176(cb)
6 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:194(_lock_unlock_module)
39/8 0.000 0.000 0.166 0.021 <frozen importlib._bootstrap>:211(_call_with_frames_removed)
478 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:222(_verbose_message)
34 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:307(__init__)
34 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:311(__enter__)
34 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:318(__exit__)
136 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:321(<genexpr>)
30 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:35(_new_module)
35 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:369(__init__)
64 0.000 0.000 0.001 0.000 <frozen importlib._bootstrap>:403(cached)
34 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:416(parent)
34 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:424(has_location)
34 0.000 0.000 0.001 0.000 <frozen importlib._bootstrap>:504(_init_module_attrs)
34 0.000 0.000 0.010 0.000 <frozen importlib._bootstrap>:576(module_from_spec)
35 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:58(__init__)
34/8 0.000 0.000 0.208 0.026 <frozen importlib._bootstrap>:663(_load_unlocked)
35 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:719(find_spec)
41 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:78(acquire)
35 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:792(find_spec)
105 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:855(__enter__)
105 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:859(__exit__)
35 0.000 0.000 0.016 0.000 <frozen importlib._bootstrap>:882(_find_spec)
35/9 0.000 0.000 0.213 0.024 <frozen importlib._bootstrap>:948(_find_and_load_unlocked)
35/9 0.000 0.000 0.213 0.024 <frozen importlib._bootstrap>:978(_find_and_load)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:1029(__init__)
4 0.000 0.000 0.008 0.002 <frozen importlib._bootstrap_external>:1040(create_module)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:1048(exec_module)
4 0.000 0.000 0.001 0.000 <frozen importlib._bootstrap_external>:1190(_path_hooks)
107 0.000 0.000 0.001 0.000 <frozen importlib._bootstrap_external>:1203(_path_importer_cache)
35 0.000 0.000 0.015 0.000 <frozen importlib._bootstrap_external>:1240(_get_spec)
35 0.000 0.000 0.015 0.000 <frozen importlib._bootstrap_external>:1272(find_spec)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:1319(__init__)
32 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:1325(<genexpr>)
34 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:1351(_get_spec)
86 0.001 0.000 0.013 0.000 <frozen importlib._bootstrap_external>:1356(find_spec)
4 0.000 0.000 0.001 0.000 <frozen importlib._bootstrap_external>:1404(_fill_cache)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:1433(<setcomp>)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:1445(path_hook_for_FileFinder)
60 0.000 0.000 0.001 0.000 <frozen importlib._bootstrap_external>:271(cache_from_source)
86 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:36(_relax_case)
34 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:369(_get_cached)
30 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:401(_check_name_wrapper)
30 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:438(_classify_pyc)
30 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:471(_validate_timestamp_pyc)
90 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:51(_r_long)
30 0.000 0.000 0.004 0.000 <frozen importlib._bootstrap_external>:523(_compile_bytecode)
446 0.000 0.000 0.001 0.000 <frozen importlib._bootstrap_external>:56(_path_join)
34 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:574(spec_from_file_location)
446 0.000 0.000 0.001 0.000 <frozen importlib._bootstrap_external>:58(<listcomp>)
60 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:62(_path_split)
30 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:719(create_module)
30/8 0.000 0.000 0.207 0.026 <frozen importlib._bootstrap_external>:722(exec_module)
160 0.000 0.000 0.012 0.000 <frozen importlib._bootstrap_external>:74(_path_stat)
30 0.001 0.000 0.178 0.006 <frozen importlib._bootstrap_external>:793(get_code)
44 0.000 0.000 0.005 0.000 <frozen importlib._bootstrap_external>:84(_path_is_mode_type)
30 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:884(__init__)
30 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:909(get_filename)
30 0.168 0.006 0.170 0.006 <frozen importlib._bootstrap_external>:914(get_data)
40 0.000 0.000 0.004 0.000 <frozen importlib._bootstrap_external>:93(_path_isfile)
30 0.000 0.000 0.002 0.000 <frozen importlib._bootstrap_external>:951(path_stats)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:98(_path_isdir)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1092 0.001 0.000 0.002 0.000 <string>:1(__new__)
1 0.000 0.000 0.000 0.000 __future__.py:48(<module>)
1 0.000 0.000 0.000 0.000 __future__.py:80(_Feature)
10 0.000 0.000 0.000 0.000 __future__.py:81(__init__)
1 0.000 0.000 0.008 0.008 __init__.py:3(<module>)
2 0.000 0.000 0.000 0.000 __init__.py:316(namedtuple)
11 0.000 0.000 0.000 0.000 __init__.py:388(<genexpr>)
3 0.000 0.000 0.000 0.000 __init__.py:43(normalize_encoding)
1 0.000 0.000 0.094 0.094 __init__.py:5(<module>)
6 0.000 0.000 0.000 0.000 _bootlocale.py:33(getpreferredencoding)
1 0.000 0.000 0.000 0.000 _bootlocale.py:5(<module>)
561 0.001 0.000 0.010 0.000 _collections_abc.py:657(get)
1 0.000 0.000 0.000 0.000 _weakrefset.py:36(__init__)
1 0.000 0.000 0.000 0.000 _weakrefset.py:81(add)
1 0.000 0.000 0.000 0.000 abc.py:1(<module>)
6 0.000 0.000 0.000 0.000 abc.py:125(__new__)
4 0.000 0.000 0.000 0.000 abc.py:7(abstractmethod)
1 0.000 0.000 0.000 0.000 argparse.py:1022(_HelpAction)
1 0.000 0.000 0.000 0.000 argparse.py:1024(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:1041(_VersionAction)
1 0.000 0.000 0.000 0.000 argparse.py:1043(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:105(_AttributeHolder)
1 0.000 0.000 0.000 0.000 argparse.py:1067(_SubParsersAction)
1 0.000 0.000 0.000 0.000 argparse.py:1069(_ChoicesPseudoAction)
1 0.000 0.000 0.000 0.000 argparse.py:1165(FileType)
1 0.000 0.000 0.000 0.000 argparse.py:1219(Namespace)
1 0.000 0.000 0.000 0.000 argparse.py:1226(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:1239(_ActionsContainer)
3 0.000 0.000 0.000 0.000 argparse.py:1241(__init__)
34 0.000 0.000 0.000 0.000 argparse.py:1293(register)
8 0.000 0.000 0.000 0.000 argparse.py:1297(_registry_get)
4 0.000 0.000 0.000 0.000 argparse.py:1322(add_argument)
2 0.000 0.000 0.000 0.000 argparse.py:1369(add_argument_group)
4 0.000 0.000 0.000 0.000 argparse.py:1379(_add_action)
1 0.000 0.000 0.000 0.000 argparse.py:1443(_get_positional_kwargs)
3 0.000 0.000 0.000 0.000 argparse.py:1459(_get_optional_kwargs)
4 0.000 0.000 0.000 0.000 argparse.py:1495(_pop_action_class)
3 0.000 0.000 0.000 0.000 argparse.py:1499(_get_handler)
4 0.000 0.000 0.000 0.000 argparse.py:1508(_check_conflict)
1 0.000 0.000 0.000 0.000 argparse.py:152(HelpFormatter)
1 0.000 0.000 0.000 0.000 argparse.py:1546(_ArgumentGroup)
2 0.000 0.000 0.000 0.000 argparse.py:1548(__init__)
4 0.000 0.000 0.000 0.000 argparse.py:1570(_add_action)
1 0.000 0.000 0.000 0.000 argparse.py:1580(_MutuallyExclusiveGroup)
4 0.000 0.000 0.000 0.000 argparse.py:159(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:1600(ArgumentParser)
1 0.000 0.000 0.002 0.002 argparse.py:1619(__init__)
4 0.000 0.000 0.000 0.000 argparse.py:1728(_add_action)
1 0.000 0.000 0.000 0.000 argparse.py:1740(_get_positional_actions)
1 0.000 0.000 0.000 0.000 argparse.py:1741(<listcomp>)
1 0.000 0.000 0.000 0.000 argparse.py:1748(parse_args)
1 0.000 0.000 0.000 0.000 argparse.py:1755(parse_known_args)
1 0.000 0.000 0.000 0.000 argparse.py:1790(_parse_known_args)
1 0.000 0.000 0.000 0.000 argparse.py:1837(take_action)
1 0.000 0.000 0.000 0.000 argparse.py:1935(consume_positionals)
1 0.000 0.000 0.000 0.000 argparse.py:202(_Section)
4 0.000 0.000 0.000 0.000 argparse.py:204(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:2086(_match_arguments_partial)
1 0.000 0.000 0.000 0.000 argparse.py:2092(<listcomp>)
1 0.000 0.000 0.000 0.000 argparse.py:2096(<listcomp>)
1 0.000 0.000 0.000 0.000 argparse.py:2205(_get_nargs_pattern)
1 0.000 0.000 0.000 0.000 argparse.py:2338(_get_values)
1 0.000 0.000 0.000 0.000 argparse.py:2420(_check_value)
4 0.000 0.000 0.000 0.000 argparse.py:2460(_get_formatter)
4 0.000 0.000 0.000 0.000 argparse.py:566(_metavar_formatter)
4 0.000 0.000 0.000 0.000 argparse.py:575(format)
4 0.000 0.000 0.000 0.000 argparse.py:582(_format_args)
3 0.000 0.000 0.000 0.000 argparse.py:599(<listcomp>)
1 0.000 0.000 0.000 0.000 argparse.py:62(<module>)
1 0.000 0.000 0.000 0.000 argparse.py:650(RawDescriptionHelpFormatter)
1 0.000 0.000 0.000 0.000 argparse.py:661(RawTextHelpFormatter)
1 0.000 0.000 0.000 0.000 argparse.py:672(ArgumentDefaultsHelpFormatter)
1 0.000 0.000 0.000 0.000 argparse.py:689(MetavarTypeHelpFormatter)
1 0.000 0.000 0.000 0.000 argparse.py:722(ArgumentError)
1 0.000 0.000 0.000 0.000 argparse.py:742(ArgumentTypeError)
1 0.000 0.000 0.000 0.000 argparse.py:751(Action)
4 0.000 0.000 0.000 0.000 argparse.py:802(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:842(_StoreAction)
1 0.000 0.000 0.000 0.000 argparse.py:844(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:873(__call__)
1 0.000 0.000 0.000 0.000 argparse.py:877(_StoreConstAction)
1 0.000 0.000 0.000 0.000 argparse.py:879(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:900(_StoreTrueAction)
1 0.000 0.000 0.000 0.000 argparse.py:902(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:917(_StoreFalseAction)
1 0.000 0.000 0.000 0.000 argparse.py:934(_AppendAction)
1 0.000 0.000 0.000 0.000 argparse.py:972(_AppendConstAction)
1 0.000 0.000 0.000 0.000 argparse.py:999(_CountAction)
1 0.000 0.000 0.000 0.000 codecs.py:186(__init__)
4 0.000 0.000 0.000 0.000 codecs.py:260(__init__)
4 0.000 0.000 0.000 0.000 codecs.py:309(__init__)
4 0.000 0.000 0.000 0.000 codecs.py:319(decode)
1 0.000 0.000 0.000 0.000 common.py:10(_get_string_types)
398 0.000 0.000 0.001 0.000 common.py:24(is_string)
1 0.000 0.000 0.000 0.000 common.py:56(MissingTags)
1 0.000 0.000 0.000 0.000 common.py:6(<module>)
1 0.000 0.000 0.000 0.000 common.py:64(PystacheError)
1 0.000 0.000 0.000 0.000 common.py:69(TemplateNotFoundError)
1 0.000 0.000 0.000 0.000 context.py:117(__init__)
1 0.000 0.000 0.000 0.000 context.py:145(create)
1 0.000 0.000 0.000 0.000 context.py:15(<module>)
444 0.001 0.000 0.004 0.000 context.py:203(get)
444 0.001 0.000 0.002 0.000 context.py:304(_get_simple)
222 0.000 0.000 0.000 0.000 context.py:316(push)
1 0.000 0.000 0.000 0.000 context.py:32(NotFound)
221 0.000 0.000 0.000 0.000 context.py:323(pop)
489 0.001 0.000 0.001 0.000 context.py:37(_get_value)
1 0.000 0.000 0.000 0.000 context.py:79(KeyNotFoundError)
1 0.000 0.000 0.000 0.000 context.py:94(ContextStack)
546 0.003 0.000 0.088 0.000 contextlib.py:107(__enter__)
546 0.006 0.000 0.129 0.000 contextlib.py:116(__exit__)
1 0.000 0.000 0.000 0.000 contextlib.py:210(contextmanager)
546 0.002 0.000 0.007 0.000 contextlib.py:237(helper)
546 0.005 0.000 0.005 0.000 contextlib.py:81(__init__)
1 0.000 0.000 0.000 0.000 datetime.py:1092(tzinfo)
1 0.000 0.000 0.000 0.000 datetime.py:1162(time)
2 0.000 0.000 0.000 0.000 datetime.py:1187(__new__)
1 0.000 0.000 0.000 0.000 datetime.py:1509(datetime)
3 0.000 0.000 0.000 0.000 datetime.py:1517(__new__)
1 0.000 0.000 0.000 0.000 datetime.py:2136(timezone)
3 0.000 0.000 0.000 0.000 datetime.py:2156(_create)
35 0.000 0.000 0.000 0.000 datetime.py:379(_check_int_field)
5 0.000 0.000 0.000 0.000 datetime.py:396(_check_date_fields)
5 0.000 0.000 0.000 0.000 datetime.py:409(_check_time_fields)
3 0.000 0.000 0.000 0.000 datetime.py:41(_days_before_year)
5 0.000 0.000 0.000 0.000 datetime.py:426(_check_tzinfo_arg)
1 0.000 0.000 0.000 0.000 datetime.py:454(timedelta)
5 0.000 0.000 0.000 0.000 datetime.py:46(_days_in_month)
9 0.000 0.000 0.000 0.000 datetime.py:473(__new__)
1 0.000 0.000 0.006 0.006 datetime.py:5(<module>)
1 0.000 0.000 0.000 0.000 datetime.py:646(__neg__)
1 0.000 0.000 0.000 0.000 datetime.py:774(date)
2 0.000 0.000 0.000 0.000 datetime.py:804(__new__)
1 0.000 0.000 0.020 0.020 defaults.py:9(<module>)
1 0.000 0.000 0.001 0.001 entities.py:1(<module>)
2 0.000 0.000 0.000 0.000 enum.py:125(__prepare__)
2 0.000 0.000 0.001 0.000 enum.py:135(__new__)
2 0.000 0.000 0.000 0.000 enum.py:152(<dictcomp>)
2 0.000 0.000 0.000 0.000 enum.py:177(<setcomp>)
38 0.000 0.000 0.000 0.000 enum.py:18(_is_descriptor)
6 0.000 0.000 0.000 0.000 enum.py:198(<genexpr>)
42 0.000 0.000 0.000 0.000 enum.py:26(_is_dunder)
50 0.000 0.000 0.001 0.000 enum.py:284(__call__)
2 0.000 0.000 0.000 0.000 enum.py:335(__getattr__)
42 0.000 0.000 0.000 0.000 enum.py:34(_is_sunder)
2 0.000 0.000 0.000 0.000 enum.py:360(__members__)
52 0.000 0.000 0.000 0.000 enum.py:376(__setattr__)
2 0.000 0.000 0.001 0.000 enum.py:389(_create_)
6 0.000 0.000 0.000 0.000 enum.py:442(_get_mixins_)
6 0.000 0.000 0.000 0.000 enum.py:453(_find_data_type)
2 0.000 0.000 0.000 0.000 enum.py:474(_find_new_)
48 0.000 0.000 0.000 0.000 enum.py:526(__new__)
8 0.000 0.000 0.000 0.000 enum.py:628(value)
2 0.000 0.000 0.001 0.001 enum.py:633(_convert)
2 0.000 0.000 0.000 0.000 enum.py:64(__init__)
2 0.000 0.000 0.000 0.000 enum.py:654(<listcomp>)
38 0.000 0.000 0.000 0.000 enum.py:659(<lambda>)
42 0.000 0.000 0.000 0.000 enum.py:70(__setitem__)
24 0.000 0.000 0.000 0.000 enum.py:836(__and__)
1 0.000 0.000 0.000 0.000 fnmatch.py:11(<module>)
6 0.000 0.000 0.000 0.000 functools.py:37(update_wrapper)
1 0.000 0.000 0.000 0.000 functools.py:458(lru_cache)
1 0.000 0.000 0.000 0.000 functools.py:492(decorating_function)
5 0.000 0.000 0.000 0.000 functools.py:67(wraps)
15 0.000 0.000 0.001 0.000 genericpath.py:16(exists)
3 0.000 0.000 0.000 0.000 genericpath.py:27(isfile)
6 0.000 0.000 0.000 0.000 gettext.py:211(_expand_lang)
3 0.000 0.000 0.001 0.000 gettext.py:474(find)
3 0.000 0.000 0.001 0.000 gettext.py:514(translation)
3 0.000 0.000 0.001 0.000 gettext.py:585(dgettext)
3 0.000 0.000 0.001 0.000 gettext.py:624(gettext)
3 0.000 0.000 0.000 0.000 gitchangelog.py:1064(__init__)
3 0.000 0.000 0.201 0.067 gitchangelog.py:1067(__getattr__)
3 0.000 0.000 0.201 0.067 gitchangelog.py:1077(get)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1087(GitCmd)
546 0.002 0.000 0.003 0.000 gitchangelog.py:1089(__getattr__)
546 0.008 0.000 48.002 0.088 gitchangelog.py:1092(dir_swrap)
546 0.007 0.000 48.011 0.088 gitchangelog.py:1096(method)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1118(GitRepos)
2 0.000 0.000 0.749 0.375 gitchangelog.py:1120(__init__)
320 0.001 0.000 0.003 0.000 gitchangelog.py:1167(commit)
546 0.002 0.000 0.002 0.000 gitchangelog.py:1170(git)
3 0.000 0.000 0.000 0.000 gitchangelog.py:1174(config)
1 0.000 0.000 6.747 6.747 gitchangelog.py:1178(tags)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1193(<listcomp>)
87 0.001 0.000 6.613 0.076 gitchangelog.py:1194(<lambda>)
231 0.017 0.000 14.280 0.062 gitchangelog.py:1196(log)
143 0.002 0.000 0.005 0.000 gitchangelog.py:1222(mk_commit)
231 0.002 0.000 1.165 0.005 gitchangelog.py:1234(<listcomp>)
143 0.002 0.000 0.010 0.000 gitchangelog.py:1244(first_matching)
1 0.000 0.000 0.428 0.428 gitchangelog.py:1253(ensure_template_file_exists)
1 0.000 0.000 0.432 0.432 gitchangelog.py:1357(mustache)
47 0.001 0.000 36.285 0.772 gitchangelog.py:1368(stuffed_versions)
1 0.000 0.000 36.302 36.302 gitchangelog.py:1386(renderer)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1485(FileRegexSubst)
1 0.000 0.000 0.063 0.063 gitchangelog.py:1490(_wrapped)
47 0.010 0.000 53.212 1.132 gitchangelog.py:1508(versions_data_iter)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1543(<listcomp>)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1549(<listcomp>)
1 0.000 0.000 0.001 0.001 gitchangelog.py:1554(<listcomp>)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1573(<listcomp>)
143 0.000 0.000 0.000 0.000 gitchangelog.py:1599(<genexpr>)
88 0.000 0.000 0.000 0.000 gitchangelog.py:1618(<listcomp>)
1 0.000 0.000 53.232 53.232 gitchangelog.py:1626(changelog)
2 0.000 0.000 0.000 0.000 gitchangelog.py:1677(obsolete_option_manager)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1681(obsolete_replace_regexps)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1696(obsolete_body_split_regexp)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1709(manage_obsolete_options)
1 0.000 0.000 0.009 0.009 gitchangelog.py:1718(parse_cmd_line)
3 0.000 0.000 0.000 0.000 gitchangelog.py:1758(<lambda>)
1 0.000 0.000 0.142 0.142 gitchangelog.py:1761(get_revision)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1772(<listcomp>)
1 0.000 0.000 0.096 0.096 gitchangelog.py:1794(get_log_encoding)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1814(Config)
5 0.000 0.000 0.000 0.000 gitchangelog.py:1816(__getitem__)
1 0.000 0.000 54.413 54.413 gitchangelog.py:1884(main)
3 0.000 0.000 0.000 0.000 gitchangelog.py:1899(<lambda>)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1931(<lambda>)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1932(<lambda>)
1 0.000 0.000 0.000 0.000 gitchangelog.py:1934(<lambda>)
1 0.000 0.000 0.000 0.000 gitchangelog.py:272(ShellError)
353 0.003 0.000 0.003 0.000 gitchangelog.py:274(__init__)
1092 0.004 0.000 0.204 0.000 gitchangelog.py:282(set_cwd)
11 0.000 0.000 0.000 0.000 gitchangelog.py:330(available_in_config)
1 0.000 0.000 0.443 0.443 gitchangelog.py:335(load_config_file)
1 0.000 0.000 0.000 0.000 gitchangelog.py:366(TextProc)
20 0.000 0.000 0.000 0.000 gitchangelog.py:369(__init__)
286 0.000 0.000 0.013 0.000 gitchangelog.py:374(__call__)
10 0.000 0.000 0.000 0.000 gitchangelog.py:377(__or__)
715/286 0.002 0.000 0.012 0.000 gitchangelog.py:379(<lambda>)
143 0.000 0.000 0.000 0.000 gitchangelog.py:389(set_if_empty)
143 0.001 0.000 0.001 0.000 gitchangelog.py:395(ucfirst)
1 0.000 0.000 54.620 54.620 gitchangelog.py:4(<module>)
143 0.000 0.000 0.000 0.000 gitchangelog.py:402(final_dot)
601 0.003 0.000 0.008 0.000 gitchangelog.py:409(indent)
601 0.002 0.000 0.003 0.000 gitchangelog.py:436(<listcomp>)
3 0.000 0.000 0.000 0.000 gitchangelog.py:459(curryfy)
2 0.000 0.000 0.000 0.000 gitchangelog.py:460(<lambda>)
4 0.000 0.000 0.000 0.000 gitchangelog.py:466(<lambda>)
286 0.000 0.000 0.000 0.000 gitchangelog.py:468(<lambda>)
4 0.000 0.000 0.027 0.007 gitchangelog.py:479(file_get_contents)
1 0.009 0.009 0.010 0.010 gitchangelog.py:493(file_put_contents)
1 0.000 0.000 0.000 0.000 gitchangelog.py:559(Phile)
264 0.000 0.000 0.000 0.000 gitchangelog.py:602(__init__)
1680 0.003 0.000 1.162 0.001 gitchangelog.py:607(read)
4004 0.005 0.000 0.019 0.000 gitchangelog.py:623(write)
264 0.001 0.000 0.016 0.000 gitchangelog.py:628(close)
1 0.000 0.000 0.000 0.000 gitchangelog.py:632(Proc)
88 0.002 0.000 4.963 0.056 gitchangelog.py:634(__init__)
546 0.012 0.000 47.725 0.087 gitchangelog.py:646(cmd)
546 0.028 0.000 47.768 0.087 gitchangelog.py:661(wrap)
546 0.002 0.000 47.770 0.087 gitchangelog.py:706(swrap)
1 0.000 0.000 0.000 0.000 gitchangelog.py:717(SubGitObjectMixin)
869 0.001 0.000 0.001 0.000 gitchangelog.py:719(__init__)
532 0.001 0.000 0.004 0.000 gitchangelog.py:722(git)
1 0.000 0.000 0.000 0.000 gitchangelog.py:750(GitCommit)
320 0.001 0.000 0.002 0.000 gitchangelog.py:849(__init__)
463/320 0.010 0.000 14.902 0.047 gitchangelog.py:854(__getattr__)
320 0.001 0.000 0.001 0.000 gitchangelog.py:867(<listcomp>)
2124 0.001 0.000 0.001 0.000 gitchangelog.py:870(<genexpr>)
143 0.000 0.000 0.015 0.000 gitchangelog.py:911(author_names)
143 0.001 0.000 0.006 0.000 gitchangelog.py:913(<listcomp>)
143 0.001 0.000 0.008 0.000 gitchangelog.py:916(authors)
176 0.002 0.000 0.008 0.000 gitchangelog.py:924(date)
176 0.005 0.000 14.618 0.083 gitchangelog.py:930(has_annotated_tag)
176 0.005 0.000 17.097 0.097 gitchangelog.py:954(__le__)
88 0.000 0.000 7.857 0.089 gitchangelog.py:965(__lt__)
20 0.000 0.000 0.000 0.000 gitchangelog.py:970(__eq__)
88 0.000 0.000 0.000 0.000 gitchangelog.py:975(__hash__)
2 0.000 0.000 0.000 0.000 gitchangelog.py:982(normpath)
1 0.000 0.000 0.000 0.000 gitchangelog.py:993(GitConfig)
1 0.000 0.000 0.000 0.000 gitchangelog.rc.reference:61(<module>)
1 0.000 0.000 0.006 0.006 glob.py:1(<module>)
1 0.000 0.000 36.302 36.302 init.py:13(render)
1 0.000 0.000 0.088 0.088 init.py:6(<module>)
1 0.000 0.000 0.012 0.012 linecache.py:6(<module>)
1 0.000 0.000 0.000 0.000 loader.py:31(Loader)
1 0.000 0.000 0.000 0.000 loader.py:40(__init__)
1 0.000 0.000 0.007 0.007 loader.py:6(<module>)
3 0.000 0.000 0.000 0.000 locale.py:350(_replace_encoding)
6 0.000 0.000 0.000 0.000 locale.py:384(normalize)
3 0.000 0.000 0.000 0.000 locale.py:589(setlocale)
1 0.000 0.000 0.005 0.005 locale.py:647(getpreferredencoding)
1 0.000 0.000 0.000 0.000 locator.py:16(Locator)
1 0.000 0.000 0.000 0.000 locator.py:6(<module>)
546 0.013 0.000 0.050 0.000 os.py:616(get_exec_path)
1111 0.006 0.000 0.014 0.000 os.py:673(__getitem__)
1111 0.005 0.000 0.006 0.000 os.py:751(encode)
549 0.001 0.000 0.002 0.000 os.py:755(decode)
21928 0.038 0.000 0.067 0.000 os.py:803(fsencode)
6 0.000 0.000 0.000 0.000 parsed.py:21(__init__)
19 0.000 0.000 0.000 0.000 parsed.py:27(add)
223/1 0.002 0.000 36.299 36.299 parsed.py:37(render)
973/1 0.001 0.000 36.299 36.299 parsed.py:43(get_unicode)
1 0.000 0.000 0.000 0.000 parsed.py:6(<module>)
1 0.000 0.000 0.000 0.000 parsed.py:9(ParsedTemplate)
1 0.000 0.000 0.000 0.000 parser.py:100(_ChangeNode)
1 0.000 0.000 0.000 0.000 parser.py:112(_EscapeNode)
1 0.000 0.000 0.000 0.000 parser.py:125(_LiteralNode)
4 0.000 0.000 0.000 0.000 parser.py:127(__init__)
247 0.001 0.000 0.005 0.000 parser.py:133(render)
1 0.000 0.000 0.000 0.000 parser.py:138(_PartialNode)
1 0.000 0.000 0.000 0.000 parser.py:155(_InvertedNode)
1 0.000 0.000 0.000 0.000 parser.py:157(__init__)
46 0.000 0.000 0.001 0.000 parser.py:164(render)
1 0.000 0.000 0.000 0.000 parser.py:175(_SectionNode)
4 0.000 0.000 0.000 0.000 parser.py:180(__init__)
151/1 0.002 0.000 36.299 36.299 parser.py:191(render)
1 0.000 0.000 0.003 0.003 parser.py:21(parse)
1 0.000 0.000 0.000 0.000 parser.py:224(_Parser)
1 0.000 0.000 0.000 0.000 parser.py:229(__init__)
1 0.000 0.000 0.003 0.003 parser.py:235(_compile_delimiters)
1 0.000 0.000 0.003 0.003 parser.py:242(parse)
4 0.000 0.000 0.000 0.000 parser.py:340(_make_interpolation_node)
5 0.000 0.000 0.000 0.000 parser.py:365(_make_section_node)
1 0.000 0.000 0.003 0.003 parser.py:44(_compile_template_re)
1 0.000 0.000 0.033 0.033 parser.py:6(<module>)
1 0.000 0.000 0.000 0.000 parser.py:72(ParsingError)
1 0.000 0.000 0.000 0.000 parser.py:91(_CommentNode)
1 0.000 0.000 0.000 0.000 posixpath.py:144(basename)
636 0.004 0.000 0.007 0.000 posixpath.py:154(dirname)
16 0.000 0.000 0.001 0.000 posixpath.py:168(islink)
1 0.000 0.000 0.000 0.000 posixpath.py:232(expanduser)
6 0.000 0.000 0.000 0.000 posixpath.py:338(normpath)
4 0.000 0.000 0.000 0.000 posixpath.py:376(abspath)
2 0.000 0.000 0.001 0.001 posixpath.py:391(realpath)
2 0.000 0.000 0.001 0.001 posixpath.py:400(_joinrealpath)
21975 0.016 0.000 0.022 0.000 posixpath.py:41(_get_sep)
8 0.000 0.000 0.000 0.000 posixpath.py:64(isabs)
21330 0.086 0.000 0.137 0.000 posixpath.py:75(join)
88 0.000 0.000 0.001 0.000 re.py:170(match)
1034 0.002 0.000 0.014 0.000 re.py:180(search)
431 0.001 0.000 0.054 0.000 re.py:185(sub)
18 0.000 0.000 0.005 0.000 re.py:232(compile)
2 0.000 0.000 0.000 0.000 re.py:252(escape)
1571 0.004 0.000 0.019 0.000 re.py:271(_compile)
4 0.000 0.000 0.039 0.010 re.py:297(_compile_repl)
288 0.001 0.000 0.040 0.000 re.py:307(_subx)
217 0.000 0.000 0.002 0.000 re.py:313(filter)
247 0.001 0.000 0.004 0.000 renderengine.py:100(fetch_string)
151 0.001 0.000 0.003 0.000 renderengine.py:116(fetch_section_data)
444 0.001 0.000 0.004 0.000 renderengine.py:14(context_get)
1 0.000 0.000 36.302 36.302 renderengine.py:167(render)
1 0.000 0.000 0.000 0.000 renderengine.py:22(RenderEngine)
1 0.000 0.000 0.000 0.000 renderengine.py:45(__init__)
1 0.000 0.000 0.000 0.000 renderengine.py:6(<module>)
248 0.000 0.000 0.000 0.000 renderer.py:173(_to_unicode_soft)
248 0.000 0.000 0.001 0.000 renderer.py:184(_to_unicode_hard)
1 0.000 0.000 0.000 0.000 renderer.py:20(Renderer)
1 0.000 0.000 0.000 0.000 renderer.py:227(_make_loader)
1 0.000 0.000 0.000 0.000 renderer.py:235(_make_load_template)
1 0.000 0.000 0.000 0.000 renderer.py:247(_make_load_partial)
2 0.000 0.000 0.000 0.000 renderer.py:273(_is_missing_tags_strict)
1 0.000 0.000 0.000 0.000 renderer.py:287(_make_resolve_partial)
1 0.000 0.000 0.000 0.000 renderer.py:306(_make_resolve_context)
444 0.000 0.000 0.005 0.000 renderer.py:315(resolve_context)
1 0.000 0.000 0.000 0.000 renderer.py:323(_make_render_engine)
1 0.000 0.000 36.302 36.302 renderer.py:392(_render_string)
1 0.000 0.000 36.302 36.302 renderer.py:400(<lambda>)
1 0.000 0.000 36.302 36.302 renderer.py:406(_render_final)
1 0.000 0.000 36.302 36.302 renderer.py:421(render)
1 0.000 0.000 0.000 0.000 renderer.py:50(__init__)
1 0.000 0.000 0.040 0.040 renderer.py:6(<module>)
546 0.000 0.000 0.000 0.000 selectors.py:199(__enter__)
546 0.001 0.000 0.004 0.000 selectors.py:202(__exit__)
1 0.000 0.000 0.000 0.000 selectors.py:206(_BaseSelectorImpl)
546 0.003 0.000 0.004 0.000 selectors.py:209(__init__)
2184 0.010 0.000 0.021 0.000 selectors.py:21(_fileobj_to_fd)
2184 0.003 0.000 0.024 0.000 selectors.py:215(_fileobj_lookup)
1092 0.007 0.000 0.016 0.000 selectors.py:234(register)
1092 0.004 0.000 0.023 0.000 selectors.py:247(unregister)
546 0.003 0.000 0.003 0.000 selectors.py:268(close)
1516 0.002 0.000 0.002 0.000 selectors.py:272(get_map)
1459 0.004 0.000 0.004 0.000 selectors.py:275(_key_from_fd)
1 0.000 0.000 0.000 0.000 selectors.py:290(SelectSelector)
1 0.000 0.000 0.000 0.000 selectors.py:341(_PollLikeSelector)
546 0.004 0.000 0.008 0.000 selectors.py:347(__init__)
1092 0.005 0.000 0.022 0.000 selectors.py:351(register)
1092 0.009 0.000 0.034 0.000 selectors.py:365(unregister)
970 0.028 0.000 17.842 0.018 selectors.py:402(select)
1 0.000 0.000 0.000 0.000 selectors.py:433(PollSelector)
1 0.000 0.000 0.006 0.006 selectors.py:5(<module>)
1 0.000 0.000 0.000 0.000 selectors.py:60(_SelectorMapping)
546 0.001 0.000 0.001 0.000 selectors.py:63(__init__)
1516 0.005 0.000 0.006 0.000 selectors.py:66(__len__)
1 0.000 0.000 0.000 0.000 selectors.py:80(BaseSelector)
1 0.000 0.000 0.001 0.001 signal.py:1(<module>)
73 0.000 0.000 0.000 0.000 signal.py:10(<lambda>)
74 0.000 0.000 0.000 0.000 signal.py:17(<lambda>)
1 0.000 0.000 0.000 0.000 specloader.py:14(SpecLoader)
1 0.000 0.000 0.000 0.000 specloader.py:6(<module>)
54 0.000 0.000 0.000 0.000 sre_compile.py:249(_compile_charset)
54 0.000 0.000 0.001 0.000 sre_compile.py:276(_optimize_charset)
10 0.000 0.000 0.000 0.000 sre_compile.py:411(_mk_bitmap)
10 0.000 0.000 0.000 0.000 sre_compile.py:413(<listcomp>)
63 0.000 0.000 0.000 0.000 sre_compile.py:423(_simple)
4 0.000 0.000 0.000 0.000 sre_compile.py:432(_generate_overlap_table)
44 0.000 0.000 0.000 0.000 sre_compile.py:453(_get_iscased)
27/21 0.000 0.000 0.000 0.000 sre_compile.py:461(_get_literal_prefix)
17 0.000 0.000 0.000 0.000 sre_compile.py:492(_get_charset_prefix)
24 0.000 0.000 0.001 0.000 sre_compile.py:536(_compile_info)
48 0.000 0.000 0.000 0.000 sre_compile.py:595(isstring)
24 0.000 0.000 0.005 0.000 sre_compile.py:598(_code)
37 0.000 0.000 0.000 0.000 sre_compile.py:65(_combine_flags)
138/24 0.002 0.000 0.004 0.000 sre_compile.py:71(_compile)
24 0.000 0.000 0.013 0.001 sre_compile.py:759(compile)
217 0.001 0.000 0.001 0.000 sre_parse.py:1036(expand_template)
144 0.000 0.000 0.000 0.000 sre_parse.py:111(__init__)
300 0.000 0.000 0.000 0.000 sre_parse.py:160(__len__)
4 0.000 0.000 0.000 0.000 sre_parse.py:162(__delitem__)
996 0.001 0.000 0.001 0.000 sre_parse.py:164(__getitem__)
68 0.000 0.000 0.000 0.000 sre_parse.py:168(__setitem__)
294 0.000 0.000 0.000 0.000 sre_parse.py:172(append)
166/52 0.001 0.000 0.001 0.000 sre_parse.py:174(getwidth)
28 0.000 0.000 0.000 0.000 sre_parse.py:224(__init__)
9340 0.014 0.000 0.014 0.000 sre_parse.py:233(__next)
336 0.000 0.000 0.000 0.000 sre_parse.py:249(match)
9152 0.011 0.000 0.024 0.000 sre_parse.py:254(get)
11 0.000 0.000 0.000 0.000 sre_parse.py:267(getuntil)
193 0.000 0.000 0.000 0.000 sre_parse.py:286(tell)
1 0.000 0.000 0.000 0.000 sre_parse.py:288(seek)
18 0.000 0.000 0.000 0.000 sre_parse.py:295(_class_escape)
35 0.000 0.000 0.000 0.000 sre_parse.py:343(_escape)
36 0.000 0.000 0.000 0.000 sre_parse.py:408(_uniq)
58/24 0.000 0.000 0.007 0.000 sre_parse.py:417(_parse_sub)
72/25 0.003 0.000 0.007 0.000 sre_parse.py:475(_parse)
24 0.000 0.000 0.000 0.000 sre_parse.py:76(__init__)
104 0.000 0.000 0.000 0.000 sre_parse.py:81(groups)
28 0.000 0.000 0.000 0.000 sre_parse.py:84(opengroup)
1 0.000 0.000 0.000 0.000 sre_parse.py:843(_parse_flags)
24 0.000 0.000 0.000 0.000 sre_parse.py:903(fix_flags)
24 0.000 0.000 0.008 0.000 sre_parse.py:919(parse)
4 0.012 0.003 0.039 0.010 sre_parse.py:951(parse_template)
28 0.000 0.000 0.000 0.000 sre_parse.py:96(closegroup)
5 0.000 0.000 0.001 0.000 sre_parse.py:960(addgroup)
634 0.007 0.000 0.165 0.000 subprocess.py:1329(_get_handles)
634 0.049 0.000 34.115 0.054 subprocess.py:1383(_execute_child)
21840 0.044 0.000 0.243 0.000 subprocess.py:1442(<genexpr>)
633 0.002 0.000 0.005 0.000 subprocess.py:1526(_handle_exitstatus)
741 0.002 0.000 0.033 0.000 subprocess.py:1544(_internal_poll)
546 0.002 0.000 0.178 0.000 subprocess.py:1579(_try_wait)
1092 0.012 0.000 0.194 0.000 subprocess.py:1592(_wait)
546 0.050 0.000 18.274 0.033 subprocess.py:1633(_communicate)
546 0.001 0.000 0.001 0.000 subprocess.py:1730(_save_input)
634 0.002 0.000 0.026 0.000 subprocess.py:226(_cleanup)
1 0.000 0.000 0.000 0.000 subprocess.py:398(CompletedProcess)
1 0.000 0.000 0.032 0.032 subprocess.py:42(<module>)
1 0.000 0.000 0.000 0.000 subprocess.py:57(SubprocessError)
1 0.000 0.000 0.000 0.000 subprocess.py:60(CalledProcessError)
1 0.000 0.000 0.000 0.000 subprocess.py:608(Popen)
634 0.024 0.000 34.383 0.054 subprocess.py:656(__init__)
634 0.003 0.000 0.013 0.000 subprocess.py:850(__del__)
546 0.009 0.000 18.286 0.033 subprocess.py:895(communicate)
2062 0.001 0.000 0.001 0.000 subprocess.py:969(_remaining_time)
1 0.000 0.000 0.000 0.000 subprocess.py:97(TimeoutExpired)
970 0.001 0.000 0.001 0.000 subprocess.py:977(_check_timeout)
1092 0.003 0.000 0.197 0.000 subprocess.py:985(wait)
1 0.000 0.000 0.000 0.000 template_spec.py:10(<module>)
1 0.000 0.000 0.000 0.000 template_spec.py:12(TemplateSpec)
1 0.000 0.000 0.001 0.001 threading.py:1(<module>)
1 0.000 0.000 0.000 0.000 threading.py:1116(daemon)
1 0.000 0.000 0.000 0.000 threading.py:1154(Timer)
1 0.000 0.000 0.000 0.000 threading.py:1184(_MainThread)
1 0.000 0.000 0.000 0.000 threading.py:1186(__init__)
1 0.000 0.000 0.000 0.000 threading.py:1203(_DummyThread)
1 0.000 0.000 0.000 0.000 threading.py:204(Condition)
1 0.000 0.000 0.000 0.000 threading.py:216(__init__)
1 0.000 0.000 0.000 0.000 threading.py:240(__enter__)
1 0.000 0.000 0.000 0.000 threading.py:243(__exit__)
1 0.000 0.000 0.000 0.000 threading.py:255(_is_owned)
1 0.000 0.000 0.000 0.000 threading.py:335(notify)
1 0.000 0.000 0.000 0.000 threading.py:358(notify_all)
1 0.000 0.000 0.000 0.000 threading.py:370(Semaphore)
1 0.000 0.000 0.000 0.000 threading.py:450(BoundedSemaphore)
1 0.000 0.000 0.000 0.000 threading.py:488(Event)
1 0.000 0.000 0.000 0.000 threading.py:499(__init__)
1 0.000 0.000 0.000 0.000 threading.py:513(set)
1 0.000 0.000 0.000 0.000 threading.py:567(Barrier)
1 0.000 0.000 0.000 0.000 threading.py:721(BrokenBarrierError)
1 0.000 0.000 0.000 0.000 threading.py:744(Thread)
1 0.000 0.000 0.000 0.000 threading.py:763(__init__)
1 0.000 0.000 0.000 0.000 threading.py:88(_RLock)
1 0.000 0.000 0.000 0.000 threading.py:896(_set_ident)
1 0.000 0.000 0.000 0.000 threading.py:899(_set_tstate_lock)
1 0.000 0.000 0.000 0.000 token.py:1(<module>)
1 0.000 0.000 0.000 0.000 token.py:78(<dictcomp>)
20 0.000 0.000 0.000 0.000 tokenize.py:107(group)
1 0.000 0.000 0.000 0.000 tokenize.py:108(any)
2 0.000 0.000 0.000 0.000 tokenize.py:109(maybe)
3 0.000 0.000 0.000 0.000 tokenize.py:132(_all_string_prefixes)
24 0.000 0.000 0.000 0.000 tokenize.py:143(<listcomp>)
1 0.000 0.000 0.007 0.007 tokenize.py:21(<module>)
1 0.000 0.000 0.000 0.000 tokenize.py:212(TokenError)
1 0.000 0.000 0.000 0.000 tokenize.py:214(StopTokenizing)
1 0.000 0.000 0.000 0.000 tokenize.py:217(Untokenizer)
1 0.000 0.000 0.000 0.000 tokenize.py:94(TokenInfo)
1 0.000 0.000 0.028 0.028 traceback.py:1(<module>)
1 0.000 0.000 0.000 0.000 traceback.py:227(FrameSummary)
1 0.000 0.000 0.000 0.000 traceback.py:315(StackSummary)
1 0.000 0.000 0.000 0.000 traceback.py:437(TracebackException)
8 0.000 0.000 0.000 0.000 types.py:164(__get__)
546 0.002 0.000 0.009 0.000 warnings.py:165(simplefilter)
546 0.004 0.000 0.006 0.000 warnings.py:181(_add_filter)
546 0.002 0.000 0.002 0.000 warnings.py:453(__init__)
546 0.003 0.000 0.003 0.000 warnings.py:474(__enter__)
546 0.002 0.000 0.002 0.000 warnings.py:493(__exit__)
1157 0.001 0.000 0.001 0.000 {built-in method __new__ of type object at 0x3dffc6c40}
6 0.000 0.000 0.000 0.000 {built-in method _abc._abc_init}
4 0.000 0.000 0.000 0.000 {built-in method _codecs.utf_8_decode}
30 0.000 0.000 0.000 0.000 {built-in method _imp._fix_co_filename}
181 0.000 0.000 0.000 0.000 {built-in method _imp.acquire_lock}
4 0.008 0.002 0.008 0.002 {built-in method _imp.create_dynamic}
4 0.000 0.000 0.000 0.000 {built-in method _imp.exec_dynamic}
21 0.000 0.000 0.000 0.000 {built-in method _imp.is_builtin}
35 0.000 0.000 0.000 0.000 {built-in method _imp.is_frozen}
181 0.000 0.000 0.000 0.000 {built-in method _imp.release_lock}
6 0.000 0.000 0.000 0.000 {built-in method _locale.nl_langinfo}
3 0.000 0.000 0.000 0.000 {built-in method _locale.setlocale}
634 19.408 0.031 19.408 0.031 {built-in method _posixsubprocess.fork_exec}
24 0.000 0.000 0.000 0.000 {built-in method _sre.compile}
16 0.000 0.000 0.000 0.000 {built-in method _stat.S_ISLNK}
3 0.000 0.000 0.000 0.000 {built-in method _stat.S_ISREG}
1 0.000 0.000 0.000 0.000 {built-in method _thread._set_sentinel}
707 0.005 0.000 0.005 0.000 {built-in method _thread.allocate_lock}
83 0.000 0.000 0.000 0.000 {built-in method _thread.get_ident}
1638 0.001 0.000 0.001 0.000 {built-in method _warnings._filters_mutated}
88 0.001 0.000 0.001 0.000 {built-in method _warnings.warn}
95/93 0.002 0.000 0.002 0.000 {built-in method builtins.__build_class__}
1 0.000 0.000 0.026 0.026 {built-in method builtins.__import__}
72 0.000 0.000 0.000 0.000 {built-in method builtins.abs}
179 0.000 0.000 0.001 0.000 {built-in method builtins.any}
479 0.000 0.000 0.000 0.000 {built-in method builtins.callable}
253 0.000 0.000 0.000 0.000 {built-in method builtins.chr}
2 0.000 0.000 0.000 0.000 {built-in method builtins.compile}
45 0.000 0.000 0.000 0.000 {built-in method builtins.divmod}
35/1 0.000 0.000 54.620 54.620 {built-in method builtins.exec}
3020/2865 0.005 0.000 0.211 0.000 {built-in method builtins.getattr}
6 0.000 0.000 0.000 0.000 {built-in method builtins.globals}
496 0.001 0.000 0.001 0.000 {built-in method builtins.hasattr}
88 0.000 0.000 0.000 0.000 {built-in method builtins.hash}
59442 0.027 0.000 0.027 0.000 {built-in method builtins.isinstance}
18 0.000 0.000 0.000 0.000 {built-in method builtins.issubclass}
151 0.000 0.000 0.000 0.000 {built-in method builtins.iter}
4583/4438 0.003 0.000 0.003 0.000 {built-in method builtins.len}
8 0.000 0.000 0.000 0.000 {built-in method builtins.locals}
27 0.000 0.000 0.000 0.000 {built-in method builtins.max}
412 0.001 0.000 7.858 0.019 {built-in method builtins.min}
2420/2129 0.003 0.000 18.157 0.009 {built-in method builtins.next}
211 0.000 0.000 0.000 0.000 {built-in method builtins.ord}
2 0.000 0.000 0.000 0.000 {built-in method builtins.repr}
9 0.000 0.000 0.000 0.000 {built-in method builtins.round}
3603 0.003 0.000 0.003 0.000 {built-in method builtins.setattr}
778/691 0.003 0.000 6.616 0.010 {built-in method builtins.sorted}
2 0.000 0.000 0.000 0.000 {built-in method builtins.vars}
90 0.000 0.000 0.000 0.000 {built-in method from_bytes}
1907 0.075 0.000 0.075 0.000 {built-in method io.open}
30 0.004 0.000 0.004 0.000 {built-in method marshal.loads}
633 0.000 0.000 0.000 0.000 {built-in method posix.WEXITSTATUS}
633 0.000 0.000 0.000 0.000 {built-in method posix.WIFEXITED}
633 0.001 0.000 0.001 0.000 {built-in method posix.WIFSIGNALED}
1093 0.197 0.000 0.197 0.000 {built-in method posix.chdir}
3170 0.036 0.000 0.036 0.000 {built-in method posix.close}
44010 0.015 0.000 0.015 0.000 {built-in method posix.fspath}
549 0.004 0.000 0.004 0.000 {built-in method posix.getcwd}
4 0.001 0.000 0.001 0.000 {built-in method posix.listdir}
16 0.001 0.000 0.001 0.000 {built-in method posix.lstat}
2536 0.203 0.000 0.203 0.000 {built-in method posix.pipe}
2093 14.294 0.007 14.294 0.007 {built-in method posix.read}
1 0.000 0.000 0.000 0.000 {built-in method posix.register_at_fork}
178 0.013 0.000 0.013 0.000 {built-in method posix.stat}
741 0.204 0.000 0.204 0.000 {built-in method posix.waitpid}
546 0.001 0.000 0.001 0.000 {built-in method select.poll}
2 0.000 0.000 0.000 0.000 {built-in method sys._getframe}
353 0.001 0.000 0.001 0.000 {built-in method sys.exc_info}
2 0.000 0.000 0.000 0.000 {built-in method sys.getdefaultencoding}
2 0.000 0.000 0.000 0.000 {built-in method sys.intern}
266 0.001 0.000 0.001 0.000 {built-in method time.perf_counter}
176 0.001 0.000 0.001 0.000 {built-in method utcfromtimestamp}
5 0.000 0.000 0.000 0.000 {function Config.__getitem__ at 0x6ffff843200}
11 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects}
1 0.000 0.000 0.000 0.000 {method '__enter__' of '_thread.lock' objects}
1 0.000 0.000 0.000 0.000 {method '__exit__' of '_thread.lock' objects}
197 0.001 0.000 0.001 0.000 {method 'acquire' of '_thread.lock' objects}
818 0.001 0.000 0.001 0.000 {method 'add' of 'set' objects}
15015 0.006 0.000 0.006 0.000 {method 'append' of 'list' objects}
546 0.001 0.000 0.001 0.000 {method 'clear' of 'dict' objects}
1268 0.066 0.000 0.066 0.000 {method 'close' of '_io.BufferedReader' objects}
634 0.023 0.000 0.023 0.000 {method 'close' of '_io.BufferedWriter' objects}
1 0.000 0.000 0.000 0.000 {method 'copy' of 'dict' objects}
546 0.001 0.000 0.001 0.000 {method 'count' of 'list' objects}
3233 0.006 0.000 0.006 0.000 {method 'decode' of 'bytes' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
26674 0.018 0.000 0.018 0.000 {method 'encode' of 'str' objects}
14 0.000 0.000 0.000 0.000 {method 'end' of 're.Match' objects}
21294 0.011 0.000 0.011 0.000 {method 'endswith' of 'bytes' objects}
276 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects}
234 0.000 0.000 0.000 0.000 {method 'extend' of 'list' objects}
2184 0.004 0.000 0.004 0.000 {method 'fileno' of '_io.BufferedReader' objects}
178 0.000 0.000 0.000 0.000 {method 'find' of 'bytearray' objects}
18 0.000 0.000 0.000 0.000 {method 'find' of 'str' objects}
546 0.004 0.000 0.004 0.000 {method 'flush' of '_io.BufferedWriter' objects}
2 0.000 0.000 0.000 0.000 {method 'format' of 'str' objects}
573 0.000 0.000 0.000 0.000 {method 'get' of 'dict' objects}
52 0.000 0.000 0.000 0.000 {method 'get' of 'mappingproxy' objects}
218 0.000 0.000 0.000 0.000 {method 'group' of 're.Match' objects}
14 0.000 0.000 0.000 0.000 {method 'groupdict' of 're.Match' objects}
1 0.000 0.000 0.000 0.000 {method 'groups' of 're.Match' objects}
3 0.000 0.000 0.000 0.000 {method 'index' of 'str' objects}
548 0.001 0.000 0.001 0.000 {method 'insert' of 'list' objects}
158 0.000 0.000 0.000 0.000 {method 'isalnum' of 'str' objects}
22 0.000 0.000 0.000 0.000 {method 'isidentifier' of 'str' objects}
73 0.000 0.000 0.000 0.000 {method 'isupper' of 'str' objects}
38 0.000 0.000 0.000 0.000 {method 'items' of 'collections.OrderedDict' objects}
360 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects}
10 0.000 0.000 0.000 0.000 {method 'items' of 'mappingproxy' objects}
1092 0.001 0.000 0.001 0.000 {method 'join' of 'bytes' objects}
2413 0.003 0.000 0.004 0.000 {method 'join' of 'str' objects}
470 0.000 0.000 0.000 0.000 {method 'keys' of 'dict' objects}
41 0.000 0.000 0.000 0.000 {method 'lower' of 'str' objects}
2 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects}
94 0.000 0.000 0.000 0.000 {method 'match' of 're.Pattern' objects}
2 0.000 0.000 0.000 0.000 {method 'mro' of 'type' objects}
16 0.000 0.000 0.000 0.000 {method 'partition' of 'str' objects}
970 17.809 0.018 17.809 0.018 {method 'poll' of 'select.poll' objects}
1103 0.001 0.000 0.001 0.000 {method 'pop' of 'dict' objects}
226 0.000 0.000 0.000 0.000 {method 'pop' of 'list' objects}
157 1.156 0.007 1.156 0.007 {method 'read' of '_io.BufferedReader' objects}
30 0.002 0.000 0.002 0.000 {method 'read' of '_io.FileIO' objects}
4 0.000 0.000 0.000 0.000 {method 'read' of '_io.TextIOWrapper' objects}
1092 0.001 0.000 0.001 0.000 {method 'register' of 'select.poll' objects}
195 0.001 0.000 0.001 0.000 {method 'release' of '_thread.lock' objects}
612 0.002 0.000 0.002 0.000 {method 'remove' of 'list' objects}
742 0.002 0.000 0.002 0.000 {method 'replace' of 'str' objects}
6 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects}
634 0.001 0.000 0.001 0.000 {method 'rfind' of 'bytes' objects}
3 0.000 0.000 0.000 0.000 {method 'rfind' of 'str' objects}
287 0.000 0.000 0.000 0.000 {method 'rpartition' of 'str' objects}
88 0.000 0.000 0.000 0.000 {method 'rstrip' of 'bytes' objects}
2102 0.001 0.000 0.001 0.000 {method 'rstrip' of 'str' objects}
1049 0.004 0.000 0.004 0.000 {method 'search' of 're.Pattern' objects}
42 0.000 0.000 0.000 0.000 {method 'setdefault' of 'dict' objects}
5 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects}
2 0.000 0.000 0.000 0.000 {method 'sort' of 'list' objects}
69 0.001 0.000 0.001 0.000 {method 'split' of 'bytes' objects}
1784 0.009 0.000 0.009 0.000 {method 'split' of 'str' objects}
1 0.000 0.000 0.000 0.000 {method 'splitlines' of 'str' objects}
14 0.000 0.000 0.000 0.000 {method 'start' of 're.Match' objects}
21294 0.012 0.000 0.012 0.000 {method 'startswith' of 'bytes' objects}
287 0.000 0.000 0.000 0.000 {method 'startswith' of 'str' objects}
176 0.005 0.000 0.005 0.000 {method 'strftime' of 'datetime.date' objects}
2569 0.001 0.000 0.001 0.000 {method 'strip' of 'str' objects}
431 0.005 0.000 0.047 0.000 {method 'sub' of 're.Pattern' objects}
353 0.001 0.000 0.087 0.000 {method 'throw' of 'generator' objects}
10 0.000 0.000 0.000 0.000 {method 'translate' of 'bytearray' objects}
2 0.000 0.000 0.000 0.000 {method 'translate' of 'str' objects}
1092 0.002 0.000 0.002 0.000 {method 'unregister' of 'select.poll' objects}
12 0.000 0.000 0.000 0.000 {method 'update' of 'dict' objects}
180 0.000 0.000 0.000 0.000 {method 'upper' of 'str' objects}
2 0.000 0.000 0.000 0.000 {method 'values' of 'dict' objects}
4004 0.012 0.000 0.012 0.000 {method 'write' of '_io.BufferedWriter' objects}
1 0.000 0.000 0.000 0.000 {method 'write' of '_io.TextIOWrapper' objects}
from gitchangelog.
54s spent in built-in method builtins.exec
means the performance issue appears when invoking sub-processes.
Unless you see a way to reduce the number of those calls, I do not think there is much that can be done in my case.
from gitchangelog.
Well, you still didn't tell me what setup of gitchangelog
you used in your call (with reproduceability in mind: which repository, on which commit, and if you do some .gitchangelog.rc
tinkering.) It would be nice to know also your exact platform (windows 10 ? rev ?), your cygwin version. Your computer basic specs (RAM, cpu, model or age), so I'm not sure how I can compare my 15s
with your timings. If my timings are much better than yours, you might want to check things listed here: https://superuser.com/questions/877051/cygwin-from-windows-is-very-slow-laggy for a start.
If you already know how to use docker in any way, you could also launch gitchangelog through a docker. It could really speed things up whatever is your docker implementation (in virtualbox, WSL or WSL2).
I still need to know if gitchangelog
is slow in cygwin
in general, or slow only on your setup. I could let this issue open in the former case, as I'm interested to give a nice experience to all users.
from gitchangelog.
Sure, if you want more info:
- I use a Windows 10 64bits with 16GB of RAM, with Cygwin 3.0.7(0.338/5/3)
- I tested
gitchangelog
with a fresh clone of https://github.com/voyages-sncf-technologies/hesperides, but I know have an execution time of 41s... I think there is too much variation on my development environment to be reliable for evaluating precisely the performance bottlenecks ofgitchangelog
I know Docker well, I'll try to launch gitchangelog
through it whenever I have some more time
from gitchangelog.
Related Issues (20)
- [WinError 2] The system cannot find the file specified HOT 3
- ignore_regexps doesnt match against whole message, only subject
- regexp filter skipping matches
- Added an AUR package.
- Update Readme to include basic full example. HOT 2
- Exception with FileInsertIntoFirstRegexMatch HOT 2
- pystache missing as dependency? HOT 2
- UnicodeEncodeError character maps to undefined HOT 7
- Support for pre-commit
- How to show changelog since certain commit? HOT 1
- Use branch name for section categorisation HOT 1
- test failures caused by 3.0.4 package missing test/__init__.py
- Is this project still maintained ? HOT 2
- Enhancement Request: Multi-package repo support HOT 1
- Request: drop d2to1
- Offering to help with the project HOT 6
- Branch tags are erroneously included into change log
- Changelog usage?
- Incorrect gitchangelog format
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gitchangelog.