mirror of
https://github.com/newren/git-filter-repo.git
synced 2024-07-06 18:32:14 +02:00
filter-repo: specify sorting order in greater detail
The sorting order of entries written to files in the analysis directory didn't specify a secondary sort, thus making the order dependent on the random-ish sorting order of dictionaries and making it inconsistent between python versions. While the secondary order didn't matter much, having a defined order makes it slightly easier to define a single testcase that can work across versions. Signed-off-by: Elijah Newren <newren@gmail.com>
This commit is contained in:
parent
4cb3bc3459
commit
0ca3988953
@ -2441,7 +2441,7 @@ class RepoAnalyze(object):
|
|||||||
with open(os.path.join(reportdir, "renames.txt"), 'w') as f:
|
with open(os.path.join(reportdir, "renames.txt"), 'w') as f:
|
||||||
seen = set()
|
seen = set()
|
||||||
for pathname,equiv_group in sorted(stats['equivalence'].iteritems(),
|
for pathname,equiv_group in sorted(stats['equivalence'].iteritems(),
|
||||||
key=lambda x:x[1]):
|
key=lambda x:(x[1], x[0])):
|
||||||
if equiv_group in seen:
|
if equiv_group in seen:
|
||||||
continue
|
continue
|
||||||
seen.add(equiv_group)
|
seen.add(equiv_group)
|
||||||
@ -2454,7 +2454,7 @@ class RepoAnalyze(object):
|
|||||||
f.write("=== %s ===\n" % _("Deleted directories by reverse size"))
|
f.write("=== %s ===\n" % _("Deleted directories by reverse size"))
|
||||||
f.write(_("Format: unpacked size, packed size, date deleted, directory name\n"))
|
f.write(_("Format: unpacked size, packed size, date deleted, directory name\n"))
|
||||||
for dirname, size in sorted(dir_size['packed'].iteritems(),
|
for dirname, size in sorted(dir_size['packed'].iteritems(),
|
||||||
key=lambda x:x[1], reverse=True):
|
key=lambda x:(x[1],x[0]), reverse=True):
|
||||||
if (dir_deleted_data[dirname]):
|
if (dir_deleted_data[dirname]):
|
||||||
f.write(" {:10d} {:10d} {:10s} {}\n"
|
f.write(" {:10d} {:10d} {:10s} {}\n"
|
||||||
.format(dir_size['unpacked'][dirname],
|
.format(dir_size['unpacked'][dirname],
|
||||||
@ -2466,7 +2466,7 @@ class RepoAnalyze(object):
|
|||||||
f.write("=== %s ===\n" % _("All directories by reverse size"))
|
f.write("=== %s ===\n" % _("All directories by reverse size"))
|
||||||
f.write(_("Format: unpacked size, packed size, date deleted, directory name\n"))
|
f.write(_("Format: unpacked size, packed size, date deleted, directory name\n"))
|
||||||
for dirname, size in sorted(dir_size['packed'].iteritems(),
|
for dirname, size in sorted(dir_size['packed'].iteritems(),
|
||||||
key=lambda x:x[1], reverse=True):
|
key=lambda x:(x[1],x[0]), reverse=True):
|
||||||
f.write(" {:10d} {:10d} {:10s} {}\n"
|
f.write(" {:10d} {:10d} {:10s} {}\n"
|
||||||
.format(dir_size['unpacked'][dirname],
|
.format(dir_size['unpacked'][dirname],
|
||||||
size,
|
size,
|
||||||
@ -2478,7 +2478,7 @@ class RepoAnalyze(object):
|
|||||||
f.write("=== %s ===\n" % _("Deleted extensions by reverse size"))
|
f.write("=== %s ===\n" % _("Deleted extensions by reverse size"))
|
||||||
f.write(_("Format: unpacked size, packed size, date deleted, extension name\n"))
|
f.write(_("Format: unpacked size, packed size, date deleted, extension name\n"))
|
||||||
for extname, size in sorted(ext_size['packed'].iteritems(),
|
for extname, size in sorted(ext_size['packed'].iteritems(),
|
||||||
key=lambda x:x[1], reverse=True):
|
key=lambda x:(x[1],x[0]), reverse=True):
|
||||||
if (ext_deleted_data[extname]):
|
if (ext_deleted_data[extname]):
|
||||||
f.write(" {:10d} {:10d} {:10s} {}\n"
|
f.write(" {:10d} {:10d} {:10s} {}\n"
|
||||||
.format(ext_size['unpacked'][extname],
|
.format(ext_size['unpacked'][extname],
|
||||||
@ -2490,7 +2490,7 @@ class RepoAnalyze(object):
|
|||||||
f.write("=== %s ===\n" % _("All extensions by reverse size"))
|
f.write("=== %s ===\n" % _("All extensions by reverse size"))
|
||||||
f.write(_("Format: unpacked size, packed size, date deleted, extension name\n"))
|
f.write(_("Format: unpacked size, packed size, date deleted, extension name\n"))
|
||||||
for extname, size in sorted(ext_size['packed'].iteritems(),
|
for extname, size in sorted(ext_size['packed'].iteritems(),
|
||||||
key=lambda x:x[1], reverse=True):
|
key=lambda x:(x[1],x[0]), reverse=True):
|
||||||
f.write(" {:10d} {:10d} {:10s} {}\n"
|
f.write(" {:10d} {:10d} {:10s} {}\n"
|
||||||
.format(ext_size['unpacked'][extname],
|
.format(ext_size['unpacked'][extname],
|
||||||
size,
|
size,
|
||||||
@ -2502,7 +2502,7 @@ class RepoAnalyze(object):
|
|||||||
f.write("=== %s ===\n" % _("Deleted paths by reverse accumulated size"))
|
f.write("=== %s ===\n" % _("Deleted paths by reverse accumulated size"))
|
||||||
f.write(_("Format: unpacked size, packed size, date deleted, path name(s)\n"))
|
f.write(_("Format: unpacked size, packed size, date deleted, path name(s)\n"))
|
||||||
for pathname, size in sorted(path_size['packed'].iteritems(),
|
for pathname, size in sorted(path_size['packed'].iteritems(),
|
||||||
key=lambda x:x[1], reverse=True):
|
key=lambda x:(x[1],x[0]), reverse=True):
|
||||||
when = stats['file_deletions'].get(pathname, None)
|
when = stats['file_deletions'].get(pathname, None)
|
||||||
if when:
|
if when:
|
||||||
f.write(" {:10d} {:10d} {:10s} {}\n"
|
f.write(" {:10d} {:10d} {:10s} {}\n"
|
||||||
@ -2515,7 +2515,7 @@ class RepoAnalyze(object):
|
|||||||
f.write("=== %s ===\n" % _("All paths by reverse accumulated size"))
|
f.write("=== %s ===\n" % _("All paths by reverse accumulated size"))
|
||||||
f.write(_("Format: unpacked size, packed size, date deleted, pathectory name\n"))
|
f.write(_("Format: unpacked size, packed size, date deleted, pathectory name\n"))
|
||||||
for pathname, size in sorted(path_size['packed'].iteritems(),
|
for pathname, size in sorted(path_size['packed'].iteritems(),
|
||||||
key=lambda x:x[1], reverse=True):
|
key=lambda x:(x[1],x[0]), reverse=True):
|
||||||
when = stats['file_deletions'].get(pathname, None)
|
when = stats['file_deletions'].get(pathname, None)
|
||||||
f.write(" {:10d} {:10d} {:10s} {}\n"
|
f.write(" {:10d} {:10d} {:10s} {}\n"
|
||||||
.format(path_size['unpacked'][pathname],
|
.format(path_size['unpacked'][pathname],
|
||||||
@ -2528,7 +2528,7 @@ class RepoAnalyze(object):
|
|||||||
f.write("=== %s ===\n" % _("Files by sha and associated pathnames in reverse size"))
|
f.write("=== %s ===\n" % _("Files by sha and associated pathnames in reverse size"))
|
||||||
f.write(_("Format: sha, unpacked size, packed size, filename(s) object stored as\n"))
|
f.write(_("Format: sha, unpacked size, packed size, filename(s) object stored as\n"))
|
||||||
for sha, size in sorted(stats['packed_size'].iteritems(),
|
for sha, size in sorted(stats['packed_size'].iteritems(),
|
||||||
key=lambda x:x[1], reverse=True):
|
key=lambda x:(x[1],x[0]), reverse=True):
|
||||||
if sha not in stats['names']:
|
if sha not in stats['names']:
|
||||||
# Some objects in the repository might not be referenced, or not
|
# Some objects in the repository might not be referenced, or not
|
||||||
# referenced by the branches/tags the user cares about; skip them.
|
# referenced by the branches/tags the user cares about; skip them.
|
||||||
|
@ -457,8 +457,8 @@ test_expect_success C_LOCALE_OUTPUT '--analyze' '
|
|||||||
f00c965d8307308469e537302baa73048488f162 21 37 numbers/small.num
|
f00c965d8307308469e537302baa73048488f162 21 37 numbers/small.num
|
||||||
2aa69a2a708eed00cb390e30f6bcc3eed773f390 20 36 whatever
|
2aa69a2a708eed00cb390e30f6bcc3eed773f390 20 36 whatever
|
||||||
51b95456de9274c9a95f756742808dfd480b9b35 13 29 [QcapriciousQ, QfickleQ, QmercurialQ]
|
51b95456de9274c9a95f756742808dfd480b9b35 13 29 [QcapriciousQ, QfickleQ, QmercurialQ]
|
||||||
34b6a0c9d02cb6ef7f409f248c0c1224ce9dd373 5 20 [Qsequence/toQ, Qwords/toQ]
|
|
||||||
732c85a1b3d7ce40ec8f78fd9ffea32e9f45fae0 5 20 [Qsequence/knowQ, Qwords/knowQ]
|
732c85a1b3d7ce40ec8f78fd9ffea32e9f45fae0 5 20 [Qsequence/knowQ, Qwords/knowQ]
|
||||||
|
34b6a0c9d02cb6ef7f409f248c0c1224ce9dd373 5 20 [Qsequence/toQ, Qwords/toQ]
|
||||||
7ecb56eb3fa3fa6f19dd48bca9f971950b119ede 3 18 words/know
|
7ecb56eb3fa3fa6f19dd48bca9f971950b119ede 3 18 words/know
|
||||||
EOF
|
EOF
|
||||||
test_cmp expect blob-shas-and-paths.txt &&
|
test_cmp expect blob-shas-and-paths.txt &&
|
||||||
@ -502,12 +502,12 @@ test_expect_success C_LOCALE_OUTPUT '--analyze' '
|
|||||||
8 38 <present> words/know
|
8 38 <present> words/know
|
||||||
21 37 2005-04-07 numbers/small.num
|
21 37 2005-04-07 numbers/small.num
|
||||||
20 36 <present> whatever
|
20 36 <present> whatever
|
||||||
13 29 <present> fickle
|
|
||||||
13 29 <present> mercurial
|
13 29 <present> mercurial
|
||||||
|
13 29 <present> fickle
|
||||||
13 29 <present> capricious
|
13 29 <present> capricious
|
||||||
5 20 <present> words/to
|
5 20 <present> words/to
|
||||||
5 20 <present> sequence/know
|
|
||||||
5 20 <present> sequence/to
|
5 20 <present> sequence/to
|
||||||
|
5 20 <present> sequence/know
|
||||||
EOF
|
EOF
|
||||||
test_cmp expect path-all-sizes.txt &&
|
test_cmp expect path-all-sizes.txt &&
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user