├── corpus ├── git.info ├── magit.info ├── nodejs.info ├── rust.info ├── spark.info ├── xmonad.info ├── angular.info ├── corefx.info ├── couchdb.info ├── cpython.info ├── docker.info ├── gitflow.info ├── ionic.info ├── ipython.info ├── junit.info ├── alamofire.info ├── animate.info ├── ant.info ├── discourse.info ├── electron.info ├── test-more.info ├── test-unit.info ├── bugzilla.info ├── lighttable.info ├── phpmyadmin.info ├── react-native.info ├── tensorflow.info ├── afnetworking.info ├── neural-style.info ├── README.md ├── test-more-human.sliders ├── lighttable-human.sliders ├── xmonad-human.sliders ├── neural-style-human.sliders ├── alamofire-human.sliders ├── test-unit-human.sliders ├── magit-human.sliders ├── couchdb-human.sliders ├── gitflow-human.sliders ├── afnetworking-human.sliders ├── ionic-human.sliders ├── tensorflow-human.sliders └── rust-human.sliders ├── .gitignore ├── repos ├── evaluate ├── find-compaction-diffs ├── get-corpus ├── analyze ├── show-slider-scores ├── score-splits ├── show-scorer ├── improve-slider ├── read-shift ├── enumerate-sliders ├── filter-sliders ├── run-comparison ├── compare-shifts ├── summarize ├── optimize-weights └── README.md /corpus/git.info: -------------------------------------------------------------------------------- 1 | https://github.com/git/git 2 | -------------------------------------------------------------------------------- /corpus/magit.info: -------------------------------------------------------------------------------- 1 | https://github.com/magit/magit.git 2 | -------------------------------------------------------------------------------- /corpus/nodejs.info: -------------------------------------------------------------------------------- 1 | https://github.com/nodejs/node.git 2 | -------------------------------------------------------------------------------- /corpus/rust.info: -------------------------------------------------------------------------------- 1 | https://github.com/rust-lang/rust.git 2 | -------------------------------------------------------------------------------- /corpus/spark.info: -------------------------------------------------------------------------------- 1 | https://github.com/apache/spark.git 2 | -------------------------------------------------------------------------------- /corpus/xmonad.info: -------------------------------------------------------------------------------- 1 | https://github.com/xmonad/xmonad 2 | -------------------------------------------------------------------------------- /corpus/angular.info: -------------------------------------------------------------------------------- 1 | https://github.com/angular/angular.git 2 | -------------------------------------------------------------------------------- /corpus/corefx.info: -------------------------------------------------------------------------------- 1 | https://github.com/dotnet/corefx.git 2 | -------------------------------------------------------------------------------- /corpus/couchdb.info: -------------------------------------------------------------------------------- 1 | https://github.com/apache/couchdb.git 2 | -------------------------------------------------------------------------------- /corpus/cpython.info: -------------------------------------------------------------------------------- 1 | https://github.com/python/cpython.git 2 | -------------------------------------------------------------------------------- /corpus/docker.info: -------------------------------------------------------------------------------- 1 | https://github.com/docker/docker.git 2 | -------------------------------------------------------------------------------- /corpus/gitflow.info: -------------------------------------------------------------------------------- 1 | https://github.com/nvie/gitflow.git 2 | -------------------------------------------------------------------------------- /corpus/ionic.info: -------------------------------------------------------------------------------- 1 | https://github.com/driftyco/ionic.git 2 | -------------------------------------------------------------------------------- /corpus/ipython.info: -------------------------------------------------------------------------------- 1 | https://github.com/ipython/ipython.git 2 | -------------------------------------------------------------------------------- /corpus/junit.info: -------------------------------------------------------------------------------- 1 | https://github.com/junit-team/junit4.git 2 | -------------------------------------------------------------------------------- /corpus/alamofire.info: -------------------------------------------------------------------------------- 1 | https://github.com/Alamofire/Alamofire.git 2 | -------------------------------------------------------------------------------- /corpus/animate.info: -------------------------------------------------------------------------------- 1 | https://github.com/daneden/animate.css.git 2 | -------------------------------------------------------------------------------- /corpus/ant.info: -------------------------------------------------------------------------------- 1 | https://git-wip-us.apache.org/repos/asf/ant.git 2 | -------------------------------------------------------------------------------- /corpus/discourse.info: -------------------------------------------------------------------------------- 1 | https://github.com/discourse/discourse.git 2 | -------------------------------------------------------------------------------- /corpus/electron.info: -------------------------------------------------------------------------------- 1 | https://github.com/electron/electron.git 2 | -------------------------------------------------------------------------------- /corpus/test-more.info: -------------------------------------------------------------------------------- 1 | https://github.com/Test-More/test-more.git 2 | -------------------------------------------------------------------------------- /corpus/test-unit.info: -------------------------------------------------------------------------------- 1 | https://github.com/test-unit/test-unit.git 2 | -------------------------------------------------------------------------------- /corpus/bugzilla.info: -------------------------------------------------------------------------------- 1 | https://git.mozilla.org/bugzilla/bugzilla.git 2 | -------------------------------------------------------------------------------- /corpus/lighttable.info: -------------------------------------------------------------------------------- 1 | https://github.com/LightTable/LightTable.git 2 | -------------------------------------------------------------------------------- /corpus/phpmyadmin.info: -------------------------------------------------------------------------------- 1 | https://github.com/phpmyadmin/phpmyadmin.git 2 | -------------------------------------------------------------------------------- /corpus/react-native.info: -------------------------------------------------------------------------------- 1 | https://github.com/facebook/react-native.git 2 | -------------------------------------------------------------------------------- /corpus/tensorflow.info: -------------------------------------------------------------------------------- 1 | https://github.com/tensorflow/tensorflow.git 2 | -------------------------------------------------------------------------------- /corpus/afnetworking.info: -------------------------------------------------------------------------------- 1 | https://github.com/AFNetworking/AFNetworking.git 2 | -------------------------------------------------------------------------------- /corpus/neural-style.info: -------------------------------------------------------------------------------- 1 | https://github.com/jcjohnson/neural-style.git 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | /corpus/* 3 | !/corpus/*.info 4 | !/corpus/*-human.sliders 5 | -------------------------------------------------------------------------------- /repos: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | for f in corpus/*.info 4 | do 5 | basename "$f" .info 6 | done 7 | -------------------------------------------------------------------------------- /evaluate: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | evaluate() { 4 | local repo="$1" 5 | ./compare-shifts --repo=$repo --correct=h \ 6 | h=corpus/$repo-human.sliders \ 7 | i=corpus/$repo-indent.sliders \ 8 | >corpus/$repo-compare-shifts.out 9 | } 10 | 11 | for repo in "$@" 12 | do 13 | evaluate "$repo" 14 | done 15 | -------------------------------------------------------------------------------- /find-compaction-diffs: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | GIT_DIFF1="git -c diff.algorithm=myers diff -U20" 4 | GIT_DIFF2="bgit -c diff.algorithm=myers diff --compaction-heuristic -U20" 5 | 6 | git rev-list --no-merges HEAD | 7 | while read c 8 | do 9 | if ! diff -q \ 10 | <($GIT_DIFF1 $c^..$c /dev/null 13 | then 14 | echo $c 15 | diff -y -W282 \ 16 | <($GIT_DIFF1 $c^..$c &2 "Updating repository $repo..." 21 | get_repo $repo 22 | done 23 | } 24 | 25 | if test $# = 0 26 | then 27 | get_repos $(./repos) 28 | else 29 | get_repos "$@" 30 | fi 31 | -------------------------------------------------------------------------------- /corpus/README.md: -------------------------------------------------------------------------------- 1 | This directory is meant to hold a test corpus 2 | 3 | This directory can be used to hold Git repositories whose commits will be used for testing `diff` heuristics. The `analyze` tool assumes that its input is located as a direct subdirectory of this directory, and derives the name of output files from the name of the subdirectory. 4 | 5 | The Git repositories here can be bare. 6 | 7 | The tools are quite general; they can analyze diffs between arbitrary commits or blobs. But currently `analyze` only uses the non-merge, non-orphan commits on the HEAD branch of a repo. (It might be interesting to analyze bigger diffs, like `git diff HEAD~1000..HEAD`, to see if they behave differently.) 8 | 9 | Let's accumulate "human"-determined optimum shifts in this directory: 10 | 11 | * `$repo.info` -- a file containing the URL of a test repo. 12 | * `$repo-human.sliders` -- a "sliders" file containing human-determined shifts. These can be used for comparison against shifts determined by various heuristics. 13 | 14 | -------------------------------------------------------------------------------- /analyze: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | GIT_EXPERIMENTAL="bgit -c diff.algorithm=myers" 4 | GIT_EXPERIMENTAL_OPTS="--compaction-heuristic" 5 | 6 | analyze() { 7 | local repo="$1" 8 | 9 | git -C corpus/$repo.git log --min-parents=1 --max-parents=1 --format='%P..%H' HEAD | 10 | ./enumerate-sliders --repo=$repo >corpus/$repo.sliders 11 | 12 | cat corpus/$repo.sliders | 13 | while read old new prefix line_number shifts 14 | do 15 | $GIT_EXPERIMENTAL -C corpus/$repo.git diff $GIT_EXPERIMENTAL_OPTS -U20 "$old" "$new" -- | 16 | ./read-shift "$old" "$new" "$prefix" $line_number 17 | done >corpus/$repo-compaction.sliders 18 | 19 | cat corpus/$repo.sliders | 20 | ./improve-slider --repo=$repo >corpus/$repo-indent.sliders 21 | 22 | ./compare-shifts --repo=$repo --any-nonzero \ 23 | g=corpus/$repo.sliders \ 24 | c=corpus/$repo-compaction.sliders \ 25 | i=corpus/$repo-indent.sliders \ 26 | >corpus/$repo-compare-shifts.out 27 | } 28 | 29 | for repo in "$@" 30 | do 31 | analyze "$repo" 32 | done 33 | -------------------------------------------------------------------------------- /show-slider-scores: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | import sys 4 | import os 5 | import io 6 | import argparse 7 | 8 | sys.path.insert(0, os.path.dirname(sys.argv[0])) 9 | 10 | import diff_heuristics 11 | from diff_heuristics import SliderName 12 | from diff_heuristics import DefaultSplitScorer as SplitScorer 13 | 14 | 15 | def main(args): 16 | parser = argparse.ArgumentParser( 17 | description='Improve sliders read from stdin, showing scores' 18 | ) 19 | parser.add_argument('--repo', type=str, required=True) 20 | parser.add_argument('--verbose', '-v', action='store_true') 21 | SplitScorer.add_arguments(parser) 22 | 23 | options = parser.parse_args(args) 24 | 25 | if options.verbose: 26 | diff_heuristics.verbose = True 27 | 28 | scorer = SplitScorer.from_options(options) 29 | 30 | for (slidername, shifts) in SliderName.read(sys.stdin): 31 | slider = slidername.compute_slider('corpus/%s.git' % (options.repo,)) 32 | print(str(slidername)) 33 | slider.show(scorer) 34 | 35 | 36 | if __name__ == '__main__': 37 | main(sys.argv[1:]) 38 | -------------------------------------------------------------------------------- /score-splits: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | import sys 4 | import os 5 | import io 6 | import argparse 7 | 8 | sys.path.insert(0, os.path.dirname(sys.argv[0])) 9 | 10 | import diff_heuristics 11 | 12 | from diff_heuristics import DefaultSplitScorer as SplitScorer 13 | 14 | 15 | def main(args): 16 | parser = argparse.ArgumentParser( 17 | description='Show the scores for splitting the lines on stdin' 18 | ) 19 | parser.add_argument('--verbose', '-v', action='store_true') 20 | SplitScorer.add_arguments(parser) 21 | 22 | options = parser.parse_args(args) 23 | 24 | if options.verbose: 25 | diff_heuristics.verbose = True 26 | 27 | scorer = SplitScorer.from_options(options) 28 | 29 | input = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8', errors='replace') 30 | lines = [line.rstrip('\n\r') for line in input.readlines()] 31 | for (i, line) in enumerate(lines): 32 | print('%5d %5d|%s' % (i, scorer(lines, i), line)) 33 | print('%5d %5d' % (len(lines), scorer(lines, len(lines)))) 34 | 35 | 36 | if __name__ == '__main__': 37 | main(sys.argv[1:]) 38 | -------------------------------------------------------------------------------- /show-scorer: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | """Display the specified SplitScorer.""" 4 | 5 | import sys 6 | import os 7 | import argparse 8 | 9 | sys.path.insert(0, os.path.dirname(sys.argv[0])) 10 | 11 | import diff_heuristics 12 | from diff_heuristics import DefaultSplitScorer as SplitScorer 13 | 14 | 15 | def main(args): 16 | parser = argparse.ArgumentParser( 17 | description=__doc__, 18 | ) 19 | parser.add_argument( 20 | '--style', choices=['repr', 'options', 'string'], default='repr', 21 | help=( 22 | 'Select the format for the output. Choices are ' 23 | '"repr" (output the scorer\'s Python representation), ' 24 | '"options" (output the command-line options needed to select ' 25 | 'this scorer, one per line), or ' 26 | '"string" (output as a string suitable to include in filenames). ' 27 | 'The default is "repr".' 28 | ), 29 | ) 30 | parser.add_argument('--verbose', '-v', action='store_true') 31 | SplitScorer.add_arguments(parser) 32 | 33 | options = parser.parse_args(args) 34 | 35 | if options.verbose: 36 | diff_heuristics.verbose = True 37 | 38 | scorer = SplitScorer.from_options(options) 39 | 40 | if options.style == 'repr': 41 | print(repr(scorer)) 42 | elif options.style == 'options': 43 | for option in scorer.as_command_line_options(): 44 | print(option) 45 | elif options.style == 'string': 46 | print(scorer.as_filename_string()) 47 | 48 | 49 | if __name__ == '__main__': 50 | main(sys.argv[1:]) 51 | -------------------------------------------------------------------------------- /improve-slider: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | """Choose the 'best' shift for a particular slider. 4 | 5 | usage: 6 | 7 | improve-slider --repo=REPO [--verbose] 8 | 9 | To stdin should be written one or more sliders to be processed, in the 10 | following format: 11 | 12 | : : [-/+] [...] 13 | 14 | where 15 | 16 | * : names a blob to be diffed. 17 | 18 | * [-/+] is '-' if lines are being deleted, '+' if lines are being 19 | added. 20 | 21 | * is the line number of the first line being 22 | added/deleted, when the slider is shifted to its canonical position. 23 | The line number is relative to the old blob if lines are being 24 | deleted and relative to the new blob if lines are being added. 25 | 26 | * can be integers. These are ignored. 27 | 28 | Write the results to stdout in the same format as the input, where 29 | is the preferred shift. 30 | 31 | """ 32 | 33 | import sys 34 | import os 35 | import io 36 | import re 37 | import argparse 38 | 39 | sys.path.insert(0, os.path.dirname(sys.argv[0])) 40 | 41 | import diff_heuristics 42 | from diff_heuristics import SliderName 43 | from diff_heuristics import DefaultSplitScorer as SplitScorer 44 | 45 | 46 | def main(args): 47 | parser = argparse.ArgumentParser( 48 | description='Read a slider shift from a diff' 49 | ) 50 | parser.add_argument('--repo', type=str, required=True) 51 | parser.add_argument('--verbose', '-v', action='store_true') 52 | SplitScorer.add_arguments(parser) 53 | 54 | options = parser.parse_args(args) 55 | 56 | if options.verbose: 57 | diff_heuristics.verbose = True 58 | 59 | scorer = SplitScorer.from_options(options) 60 | 61 | for (slidername, shifts) in SliderName.read(sys.stdin): 62 | (old_sha1, old_filename) = slidername.old.split(':', 1) 63 | (new_sha1, new_filename) = slidername.new.split(':', 1) 64 | 65 | try: 66 | slider = slidername.compute_slider( 67 | 'corpus/%s.git' % (options.repo,) 68 | ) 69 | except diff_heuristics.ParsingError as e: 70 | sys.stderr.write( 71 | 'Error parsing slider %s: %s\n' % (slidername, e,) 72 | ) 73 | else: 74 | slidername.write(sys.stdout, [slider.find_best_shift(scorer)]) 75 | 76 | 77 | if __name__ == '__main__': 78 | main(sys.argv[1:]) 79 | -------------------------------------------------------------------------------- /corpus/test-more-human.sliders: -------------------------------------------------------------------------------- 1 | eba0dd8c38f9aba1d9e3402b1e7d823da6e119ac:t/Test2/modules/API/Instance.t 3aa36b6a2ce950bd5c9a9154a8e8f255ba796cbc:t/Test2/modules/API/Instance.t + 284 -1 2 | 0a4a929fb52191dc111fe15f59312ec84fa4108b:t/Test2/modules/API/Instance.t fcd9514d6ce70bc25ce54f4adda430dc659ece3f:t/Test2/modules/API/Instance.t + 256 -1 3 | 6adf84d1cebec352ea26cde2bf121a154bf6485b:t/modules/API/Context.t 8dd4349435c96dd48524ac1518847fdc13b7aa47:t/modules/API/Context.t - 273 -1 4 | 98193d48c95e179f992c629c5438c9e8c4795da8:t/modules/Context.t 79a9e21c4698eb3b3386f866c943f7f10f87f658:t/modules/Context.t - 246 -1 5 | 23df7dd041f420542765998de66fd60a20b2fb26:t/modules/Plugin/Compare.t bab4e51e05f27c7e239188efaa05b634d1b7d101:t/modules/Plugin/Compare.t + 95 -2 6 | 10a6e011e034c7631d38513dcc90ac3e1c8112b1:t/modules/Plugin/Grab.t ce62a5ea4742218d671e8a18a79eb11e4dc824fa:t/modules/Plugin/Grab.t + 15 -1 7 | 10a6e011e034c7631d38513dcc90ac3e1c8112b1:t/modules/Sync.t ce62a5ea4742218d671e8a18a79eb11e4dc824fa:t/modules/Sync.t + 131 -1 8 | 656a8af1a3f8efbb160a7552cf4030d019c9f424:t/modules/Sync.t 23f8bf20ef40d163693990a025f7eb2babf2b3b6:t/modules/Sync.t + 210 -1 9 | 7d7dbe8fcb7f2a24e1ef0449ccfc772325fdc31f:lib/Test/Stream/Util.pm 847e0a1e517ae4a72ed819b38f09ab68ff442d70:lib/Test/Stream/Util.pm - 93 -1 10 | da2de78dd6f1bc78735f634221dbb96cf93ef797:Changes ba561ae1fa444d6b3a3dfb07807faa027c20981e:Changes + 2 -1 11 | 54c4fa7b6e4cd24017c4f522aca87e505378367d:t/Nested/basic.t a08848f83255001fd81b159ba16bf383d9c8389b:t/Nested/basic.t + 151 -1 12 | 509a1a2ba89457e5f214f621d45405f3ff663cb3:t/is_deeply.t 9f46f500c4bf07d77206bb6d96c6707d9e70af0e:t/is_deeply.t + 256 0 13 | ac89433363e1efecf4a3bb04740641f7554670b7:TODO e244811f1bcc3c7ed4ce8c01b8bf5a4cbd0cc4da:TODO + 32 0 14 | 13ff40c3ce3720636196b59ca1e34a763628147a:t/no_ending.t 72054737cc9e5efdd4325ad68d424bbcdfa0a68b:t/no_ending.t + 4 -1 15 | 13ff40c3ce3720636196b59ca1e34a763628147a:t/plan_no_plan.t 72054737cc9e5efdd4325ad68d424bbcdfa0a68b:t/plan_no_plan.t + 11 -1 16 | 13ff40c3ce3720636196b59ca1e34a763628147a:t/todo.t 72054737cc9e5efdd4325ad68d424bbcdfa0a68b:t/todo.t + 4 -1 17 | d9f2ba2e7b6b0213a4856f79d3e6962e38a5056c:lib/Test/Builder.pm 18c7461b0e2eef059d931014f91be25163af6da4:lib/Test/Builder.pm + 436 -1 18 | ab99b4b96888cdf2e238ba03bfb00b25d54bae9d:t/is_deeply_fail.t 0ef7718f3762c0688d4e3253e1f04b5302499991:t/is_deeply_fail.t + 344 0 19 | b65ef55649c671ae9bfa116961513fb73115466c:lib/Test/More.pm 471d02815579efda19830a5f9167e2569a3e05d0:lib/Test/More.pm + 593 0 20 | -------------------------------------------------------------------------------- /corpus/lighttable-human.sliders: -------------------------------------------------------------------------------- 1 | fff5bf4ee3d189bddbcaf26abd0da9a59182eecb:src/lt/objs/langs/clj.cljs 7dd8c65b381c7706c4e6e5acb66f68b05ac681cd:src/lt/objs/langs/clj.cljs + 356 -1 2 | 12cac6e4d698fa594490c2ced0bbcbec8acbbcee:src/lt/objs/langs/clj.cljs 284a1832a481129c8d0c778888acb3545f54b785:src/lt/objs/langs/clj.cljs + 271 -1 3 | e82d82d0078f0d91bf7e9c20a6de7ccdc76eb742:deploy/core/css/skins/new-dark.css 41673ccdd48342a34b65a3a32d4eda7a7b1d40e9:deploy/core/css/skins/new-dark.css - 68 -1 4 | fff5bf4ee3d189bddbcaf26abd0da9a59182eecb:deploy/core/node_modules/lighttable/bootstrap.js 7dd8c65b381c7706c4e6e5acb66f68b05ac681cd:deploy/core/node_modules/lighttable/bootstrap.js + 18557 0 5 | ce8ab48b7ecd8a7110538da1b66c5431f3c95765:deploy/core/node_modules/codemirror/modes/gas.js 9a7e760c6d28ab9d2aad4666653b0f9a4595ae4a:deploy/core/node_modules/codemirror/mode/gas/gas.js + 344 0 6 | fff5bf4ee3d189bddbcaf26abd0da9a59182eecb:deploy/core/node_modules/lighttable/bootstrap.js 7dd8c65b381c7706c4e6e5acb66f68b05ac681cd:deploy/core/node_modules/lighttable/bootstrap.js + 18573 0 7 | fff5bf4ee3d189bddbcaf26abd0da9a59182eecb:deploy/core/node_modules/lighttable/bootstrap.js 7dd8c65b381c7706c4e6e5acb66f68b05ac681cd:deploy/core/node_modules/lighttable/bootstrap.js + 18589 0 8 | d4a8a47ef36a8738242ef6c21ecf134f39ceff50:src/lt/objs/menu.cljs 2a8513542876af9902e47b6e21a4d41295df8a20:src/lt/objs/menu.cljs + 145 0 9 | e215ed806d73ee8e623f7bde86263ba1cc41508d:deploy/core/node_modules/lighttable/background/behaviorsParser.js 86323e5d847670cbea7aca5869d148d0dc5a0fce:deploy/core/node_modules/lighttable/background/behaviorsParser.js + 79 0 10 | fff5bf4ee3d189bddbcaf26abd0da9a59182eecb:deploy/core/node_modules/lighttable/bootstrap.js 7dd8c65b381c7706c4e6e5acb66f68b05ac681cd:deploy/core/node_modules/lighttable/bootstrap.js + 15963 0 11 | ecd1ee5420c93c2c805065e097490a423511e581:src/lt/objs/plugins.cljs 3f900b4266809ae142f4b34d62b86170b97674b8:src/lt/objs/plugins.cljs + 179 -1 12 | 0ec323bfced012412ce258134a4685db6e1cd29c:deploy/core/node_modules/codemirror/vim.js fff5bf4ee3d189bddbcaf26abd0da9a59182eecb:deploy/core/node_modules/codemirror/vim.js + 43 0 13 | 60290bb6a18ef170b08d2ea9d364cbdead97d89a:src/lt/objs/langs/clj.cljs f8f625e826569eb84bd8263b9b63f0e42a9a4c5f:src/lt/objs/langs/clj.cljs + 720 -1 14 | ce8ab48b7ecd8a7110538da1b66c5431f3c95765:deploy/core/node_modules/codemirror/modes/mirc.js 9a7e760c6d28ab9d2aad4666653b0f9a4595ae4a:deploy/core/node_modules/codemirror/mode/mirc/mirc.js + 192 0 15 | 9c283d003d00fdb2d74e8ca5117e6ecfcd559144:src/lt/objs/search.cljs 2c9b866d8fd6ed45fb896ed2f9c8edf6e38f6069:src/lt/objs/search.cljs + 164 0 16 | -------------------------------------------------------------------------------- /corpus/xmonad-human.sliders: -------------------------------------------------------------------------------- 1 | d9e3ebf53194d1cf02bae28f0c885b5c75610cfa:src/XMonad/Main.hsc d01b9135943c30be8ddadae0bf3d536b272d6591:src/XMonad/Main.hs - 46 -1 2 | 40cb12ce174ab55c5b2bbfeee2d966645a9121d4:XMonad/Config.hs 8e7634f54381af9aa954b43496d1dfdf6bd6dd0e:XMonad/Config.hs + 149 -1 3 | 44bc9558d9498ee5502cffd386287cfb33519d26:XMonad/Core.hs 73e406f4a667b61df2033815289df77dcdf61436:XMonad/Core.hs + 352 -1 4 | 750544fda9a6fd99bf2549d0b882cdd7da79dfbd:tests/Properties.hs dbbd934b0b0c5b7891cd3ce4adf776345db128ea:tests/Properties.hs + 814 -1 5 | cc2754d82afd07adda240a6b4011bc9bfd652e60:man/xmonad.hs 9d9acba45feaf96b521812e3b8d61b72fed887ae:man/xmonad.hs + 251 -1 6 | ab0ebe105014395b758385acdb894ae26944385e:Config.hs 89645e0999e2170d032797fe36c271250dbe31f5:Config.hs - 108 -1 7 | ab0ebe105014395b758385acdb894ae26944385e:Config.hs 89645e0999e2170d032797fe36c271250dbe31f5:Config.hs + 137 -1 8 | e70fb29efc365f7cd6c931c9ce88d9b4183d6afa:Config.hs 8e303a6beaad56c3099b23f8815743513717af53:Config.hs - 142 -1 9 | d1ad738f6b93ac6564a0725dfd64bffb07995ed9:tests/Properties.hs 6cff2dddcfa9ae72e0be241a8df8e3868a73160f:tests/Properties.hs + 528 -1 10 | 84c6432c824ffaa3b2c6c841447e156c419b86cb:tests/Properties.hs 808894c2179ef65501a42498000859378877b3e2:tests/Properties.hs + 406 -1 11 | 4ffee115e17bdc2684ec43381190d77eb3c16e53:StackSet.hs 5f8202e79e3b92357a9202e25b24e3cc362047d7:StackSet.hs + 252 -1 12 | 00e1038d71b31469c4a346ccaa42280bffc6911f:StackSet.hs 4ffee115e17bdc2684ec43381190d77eb3c16e53:StackSet.hs + 266 -1 13 | 615a4a1af1596e57c42971b16fa82e2824dfcf2f:Operations.hs 9992737e8400e50b6b0cc7c591b72cc3cf9a7874:Operations.hs - 438 -1 14 | b3bdbf3588a90ff13fbe18a6cabf9c552fe032f9:StackSet.hs 5f3e91676a4e5f1818f7ea29db188dc92eb3cca8:StackSet.hs + 266 -1 15 | 0d4a7d098f1087f3c877f47f0b6736fe1b2bff4e:XMonad.hs 3bfa0930af7c81fb125338e8fa75c076238baf8f:XMonad.hs - 193 0 16 | 21e09361a612116616ad8a17331652d45d5fcfd3:Config.hs 7ae7029b507b3243c17fc289c7495fa0f648b955:Config.hs + 103 -1 17 | 77da6e4c7229375c0e8dadc17c648f1f28081fa4:StackSet.hs cad36baa1929dc090ba67fbd8ce4d5940825573c:StackSet.hs + 247 -1 18 | 0d47f6299f1e8232693d9330e142f47cf37f9a1b:tests/Properties.hs bf0f487ca4df68595824e6e883d4314a5e015dd9:tests/Properties.hs + 155 -1 19 | be1389f7bc56e43359d29d683e1446d99a3f3325:Main.hs e955d4dbc66f05cd6b09f249750d23700c84214a:Main.hs + 38 -1 20 | 9a5523d53cfa9413b1b8d72e7478b45e90d3b4f8:Main.hs d280e17ab7294b05d6e83bac1e020deba8c29ef7:Main.hs + 34 -1 21 | b3d4730ef487352594d4a3e9b83ecd94503fde02:Main.hs ebe2ddf2e4fecf98bdd8c91d61de5c36e57a3e02:Main.hs + 31 -1 22 | 3cd001e8df5344a7c582fc24824db081d8d468f9:man/HCAR.tex 490719c035f7d6b72492f03f69d5d78df55ac5f1:man/HCAR.tex + 71 0 23 | 934fb2c36873d68f4191afb5c9872d0643b3236e:XMonad/DefaultConfig.hs c9142952c24473bb77d23db72e89248b9c9c722a:XMonad/DefaultConfig.hs + 139 -1 24 | -------------------------------------------------------------------------------- /read-shift: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | """Read the shift chosen for a particular slider in a diff. 4 | 5 | usage: 6 | 7 | read-shift : : [-/+] 8 | 9 | where 10 | 11 | * : names a blob to be diffed. 12 | 13 | * [-/+] is '-' if lines are being deleted, '+' if lines are being 14 | added. 15 | 16 | * is the line number of the first line being 17 | added/deleted, when the slider is shifted to its canonical position. 18 | The line number is relative to the old blob if lines are being 19 | deleted and relative to the new blob if lines are being added. 20 | 21 | Output the shift chosen for that slider in a diff read from stdin. 22 | Output the result to stdout as 23 | 24 | : : [-/+] 25 | 26 | """ 27 | 28 | import sys 29 | import os 30 | import io 31 | import re 32 | import argparse 33 | 34 | sys.path.insert(0, os.path.dirname(sys.argv[0])) 35 | 36 | import diff_heuristics 37 | from diff_heuristics import SliderName 38 | from diff_heuristics import iter_file_diffs 39 | from diff_heuristics import find_slider 40 | from diff_heuristics import ParsingError 41 | 42 | 43 | def main(args): 44 | parser = argparse.ArgumentParser( 45 | description='Read a slider shift from a diff' 46 | ) 47 | parser.add_argument('old', type=str) 48 | parser.add_argument('new', type=str) 49 | parser.add_argument('prefix', type=str, choices=['-', '+']) 50 | parser.add_argument('line_number', type=int) 51 | parser.add_argument('--verbose', '-v', action='store_true') 52 | 53 | options = parser.parse_args(args) 54 | 55 | slidername = SliderName( 56 | options.old, options.new, options.prefix, options.line_number, 57 | ) 58 | 59 | (old_sha1, old_filename) = slidername.old.split(':', 1) 60 | (new_sha1, new_filename) = slidername.new.split(':', 1) 61 | 62 | if options.verbose: 63 | diff_heuristics.verbose = True 64 | 65 | input = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8', errors='replace') 66 | lines = [line.rstrip('\n\r') for line in input.readlines()] 67 | try: 68 | slider = find_slider( 69 | lines, 70 | old_filename, new_filename, 71 | slidername.prefix, slidername.line_number, 72 | ) 73 | except ParsingError as e: 74 | print( 75 | 'Could not parse following slider: %s\n' 76 | ' %s' % ( 77 | e, slidername, 78 | ), 79 | file=sys.stderr, 80 | ) 81 | else: 82 | shift = slider.shift_canonically() 83 | slidername.write(sys.stdout, [shift]) 84 | 85 | 86 | if __name__ == '__main__': 87 | main(sys.argv[1:]) 88 | -------------------------------------------------------------------------------- /enumerate-sliders: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | """Find all of the slideable add/delete groups between commit pairs. 4 | 5 | Read pairs 6 | 7 | .. 8 | 9 | from stdin. (Note that such input can be generated by a command like 10 | 11 | git log -10 --min-parents=1 --max-parents=1 --format='%P..%H' HEAD 12 | 13 | .) Compute the diff between the two commits, and write any sliders 14 | found to stdout as 15 | 16 | : : [-/+] 17 | 18 | where 19 | 20 | * : names a blobs to be diffed. 21 | 22 | * [-/+] is '-' if lines are being deleted, '+' if lines are being 23 | added. 24 | 25 | * is the line number of the first line being 26 | added/deleted, when the slider is shifted to its canonical position. 27 | The line number is relative to the old blob if lines are being 28 | deleted and relative to the new blob if lines are being added. 29 | 30 | * is the shift chosen by Git. 31 | 32 | """ 33 | 34 | import sys 35 | import os 36 | import re 37 | import argparse 38 | 39 | sys.path.insert(0, os.path.dirname(sys.argv[0])) 40 | 41 | import diff_heuristics 42 | from diff_heuristics import SliderName 43 | from diff_heuristics import iter_file_diffs 44 | from diff_heuristics import compute_diff 45 | 46 | 47 | INPUT_RE = re.compile(r'^(?P[0-9a-f]{40})\.\.(?P[0-9a-f]{40})$') 48 | 49 | def main(args): 50 | parser = argparse.ArgumentParser( 51 | description='Enumerate slideable add/delete groups in a diff' 52 | ) 53 | parser.add_argument('--repo', type=str, required=True) 54 | parser.add_argument('--verbose', '-v', action='store_true') 55 | 56 | options = parser.parse_args(args) 57 | 58 | if options.verbose: 59 | diff_heuristics.verbose = True 60 | 61 | for line in sys.stdin: 62 | line = line.rstrip() 63 | m = INPUT_RE.match(line) 64 | if not m: 65 | raise RuntimeError('invalid input: %r' % (line,)) 66 | (old_sha1, new_sha1) = (m.group('old_sha1'), m.group('new_sha1')) 67 | 68 | if options.verbose: 69 | sys.stderr.write('Processing %s..%s\n' % (old_sha1, new_sha1)) 70 | lines = compute_diff('corpus/%s.git' % (options.repo,), old_sha1, new_sha1) 71 | 72 | for file_diff in iter_file_diffs(lines): 73 | for hunk in file_diff.hunks: 74 | for slider in hunk.iter_sliders(): 75 | if len(slider.shift_range) > 1: 76 | shift = slider.shift_canonically() 77 | slidername = SliderName( 78 | '%s:%s' % (old_sha1, file_diff.old_filename,), 79 | '%s:%s' % (new_sha1, file_diff.new_filename,), 80 | slider.prefix, slider.line_number, 81 | ) 82 | slidername.write(sys.stdout, [shift]) 83 | 84 | 85 | if __name__ == '__main__': 86 | main(sys.argv[1:]) 87 | -------------------------------------------------------------------------------- /corpus/neural-style-human.sliders: -------------------------------------------------------------------------------- 1 | 2912917bb4868b5ffe8ddfd6d0060a3b2109b594:README.md b2b632b1fad8501feb479a87bf1af09ff66072b3:README.md + 121 0 2 | 68a8053fbee7e3cb6f06caacfd6cca9e74cf3635:README.md 67494375c11ae55eff8ec5ee64315b17a7ea311c:README.md + 125 0 3 | e65b0556995ca8e0b18be050f5e76c1c86f4ea97:neural_style.lua bfa24329cdbc8f6e0512e6a07f9ad9bcdd3638f8:neural_style.lua + 314 0 4 | 68a8053fbee7e3cb6f06caacfd6cca9e74cf3635:README.md 67494375c11ae55eff8ec5ee64315b17a7ea311c:README.md + 115 0 5 | 912cda3a7b16517814592c92d411f4e2392bbeb3:README.md a6bc0635946ca2681e71ce92b931ec1ffaf91192:README.md + 140 0 6 | 9e0b57dc91ef905cafbea97ab54b5e0ff0a2ad58:neural_style.lua 1b79f84e8fec2eff8841094532cf1d6e13059cae:neural_style.lua - 47 0 7 | 63b1f3a6fe3802ffa282104995c13ba592ab5294:README.md f7cebd289049b651df4d62ee2f25c8e02de74043:README.md + 86 0 8 | 4b683aad2a4bd8eec2425a8d7fc8199085dd369f:README.md 585d048b3efb35cb25b7846b5ef3000624bf51dc:README.md + 25 0 9 | 4fe11a13bb0cd7a7c7f2bd1105dd6d9101eaac33:neural_style.lua 15ad5e515c6845a827f1c978d6ba6a3ba1925149:neural_style.lua - 243 0 10 | 8250d355a63d2de6c717d57e600f54d607d3d300:README.md ca518d1bbfddfc5a846a9f781a221512744635ff:README.md + 94 0 11 | 5c0b6aa66aee1796c61effda71650fe0bf063251:README.md 165d5f0aa76c0f2f223de65e29d5d4e2ad444e23:README.md + 15 0 12 | f96c853fbd4f82864a13071273ad3b49e1933e9f:neural_style.lua 227935aa37ac1464a5c755f280662c80cb980996:neural_style.lua + 194 0 13 | f2f3840e2e13ce403a576048ada3b2eae69db5c2:README.md b2af8d2e40937d88942db8b0ea7f11b15813d9f5:README.md + 123 0 14 | 03d1f29f607ad8ec19ad2a9830f29f4b65171dc8:neural_style.lua d9e4dd43677ee766ad39f2745e6cab7f8210ae7d:neural_style.lua + 46 0 15 | 9e0b57dc91ef905cafbea97ab54b5e0ff0a2ad58:neural_style.lua 1b79f84e8fec2eff8841094532cf1d6e13059cae:neural_style.lua - 59 0 16 | 73608d3870d8098e56c2a519282c631d025007b1:README.md 3ccbd9d5c0c44befbdc7a429267ce902e08160fb:README.md + 225 0 17 | 68a8053fbee7e3cb6f06caacfd6cca9e74cf3635:neural_style.lua 67494375c11ae55eff8ec5ee64315b17a7ea311c:neural_style.lua + 47 0 18 | 837c63d6f9625ae0429377204c4d86fbb6b6402b:README.md 0d9d00a6b151103c7901a63df9fa7825396d5ba1:README.md + 48 0 19 | 68a8053fbee7e3cb6f06caacfd6cca9e74cf3635:README.md 67494375c11ae55eff8ec5ee64315b17a7ea311c:README.md + 215 0 20 | 7ca5aa47a6c23ad5e9ecd229fab48ae0b673ea16:neural_style.lua 0c5d5d5c44d33b0e84733e3e75a7ee69dd8ee2cb:neural_style.lua + 283 0 21 | 42c5346c4a8faa75d0c1216c4b2ba20ec44d2377:neural_style.lua f7c2d791718a547b2d55cfa293b4d382ee74c713:neural_style.lua + 77 0 22 | 23ed434af54108fb53f8370d9ea46b537263a522:README.md ec5ba3a690d3090428d3b92b0c5d686a311bf432:README.md + 272 0 23 | 837c63d6f9625ae0429377204c4d86fbb6b6402b:README.md 0d9d00a6b151103c7901a63df9fa7825396d5ba1:README.md + 61 0 24 | 76e313571f186db21e26ea6f089a6ef424475779:README.md 106d6c1537f6c4d58532afee2b46f013df1c173b:README.md + 15 0 25 | 3d9b6c263443ab4d94b8fabb4c8cfa000bd8b6ad:README.md 28e35b1d07dbe25f4af48ab02cf125eb390c6621:README.md + 59 0 26 | 2912917bb4868b5ffe8ddfd6d0060a3b2109b594:README.md b2b632b1fad8501feb479a87bf1af09ff66072b3:README.md + 164 0 27 | 837c63d6f9625ae0429377204c4d86fbb6b6402b:README.md 0d9d00a6b151103c7901a63df9fa7825396d5ba1:README.md + 72 0 28 | 72e01865d08b69ebb9dc851ca3f0f65c2d1606c5:neural_style.lua 8250d355a63d2de6c717d57e600f54d607d3d300:neural_style.lua + 387 0 29 | -------------------------------------------------------------------------------- /filter-sliders: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | """Print out only the sliders from stdin. 4 | 5 | Omit blank and comment lines. 6 | 7 | usage: 8 | 9 | filter-sliders OPTIONS 10 | 11 | The sliders on standard input and in the SLIDERFILEs should be in the usual format: 12 | 13 | : : {-/+} [] 14 | 15 | Filter the sliders from stdin and write them to stdout. 16 | 17 | """ 18 | 19 | import sys 20 | import os 21 | import argparse 22 | 23 | sys.path.insert(0, os.path.dirname(sys.argv[0])) 24 | 25 | import diff_heuristics 26 | from diff_heuristics import SliderName 27 | 28 | 29 | def main(args): 30 | parser = argparse.ArgumentParser( 31 | description='Filter the sliders on stdin and write them to stdout' 32 | ) 33 | group = parser.add_mutually_exclusive_group() 34 | group.add_argument( 35 | '--rated', action='store_true', 36 | help='Only include rated sliders in the output', 37 | ) 38 | group.add_argument( 39 | '--unrated', action='store_true', 40 | help='Only include unrated sliders in the output', 41 | ) 42 | parser.add_argument( 43 | '--omit-shifts', action='store_true', 44 | help='Do not include any shifts in the output', 45 | ) 46 | parser.add_argument( 47 | '--only-rated', action='append', default=[], 48 | help=( 49 | 'Include only sliders with ratings in the specified file. ' 50 | 'This option can be provided multiple times.' 51 | ), 52 | ) 53 | parser.add_argument( 54 | '--omit-rated', action='append', default=[], 55 | help=( 56 | 'Omit any sliders with ratings in the specified file. ' 57 | 'This option can be provided multiple times.' 58 | ), 59 | ) 60 | parser.add_argument('--verbose', '-v', action='store_true') 61 | 62 | options = parser.parse_args(args) 63 | 64 | if options.verbose: 65 | diff_heuristics.verbose = True 66 | 67 | only = set() 68 | for filename in options.only_rated: 69 | with open(filename) as f: 70 | for (slider, shifts) in SliderName.read(f): 71 | if shifts: 72 | only.add(slider) 73 | 74 | omit = set() 75 | for filename in options.omit_rated: 76 | with open(filename) as f: 77 | for (slider, shifts) in SliderName.read(f): 78 | if shifts: 79 | omit.add(slider) 80 | 81 | try: 82 | for (slider, shifts) in SliderName.read(sys.stdin): 83 | if options.rated and not shifts: 84 | continue 85 | if options.unrated and shifts: 86 | continue 87 | if options.only_rated and slider not in only: 88 | continue 89 | if options.omit_rated and slider in omit: 90 | continue 91 | 92 | if options.omit_shifts: 93 | shifts = [] 94 | 95 | slider.write(sys.stdout, shifts) 96 | except BrokenPipeError: 97 | pass 98 | 99 | 100 | if __name__ == '__main__': 101 | main(sys.argv[1:]) 102 | 103 | 104 | -------------------------------------------------------------------------------- /run-comparison: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | # Run a full comparison of multiple algorithms from beginning to end. 4 | 5 | # Following are the "algorithms", basically, invocations of "git diff". 6 | # 7 | # usage: $algo repo old new 8 | 9 | GIT_OPTS="-c diff.algorithm=myers" 10 | CONTEXT="-U20" 11 | 12 | git_290() { 13 | git.v2.9.0 -C corpus/$1.git $GIT_OPTS diff $CONTEXT "$2" "$3" -- 14 | } 15 | 16 | git_290_compaction() { 17 | git.v2.9.0 -C corpus/$1.git $GIT_OPTS diff --compaction-heuristic $CONTEXT "$2" "$3" -- 18 | } 19 | 20 | git_compaction_fixed() { 21 | git.compaction-fixed -C corpus/$1.git $GIT_OPTS diff --compaction-heuristic $CONTEXT "$2" "$3" -- 22 | } 23 | 24 | git_indent_old() { 25 | git.indent-old -C corpus/$1.git $GIT_OPTS diff --indent-heuristic $CONTEXT "$2" "$3" -- 26 | } 27 | 28 | git_indent_new_split() { 29 | git.indent-new-split -C corpus/$1.git $GIT_OPTS diff --indent-heuristic $CONTEXT "$2" "$3" -- 30 | } 31 | 32 | git_indent_new() { 33 | git.indent-new -C corpus/$1.git $GIT_OPTS diff --indent-heuristic $CONTEXT "$2" "$3" -- 34 | } 35 | 36 | # Generate all commit diffs for the HEAD branch of a repository. 37 | # Output is pairs of commits in the format 38 | # 39 | # $old_sha..$new_sha 40 | # 41 | # usage: head_diffs repo 42 | head_diffs() { 43 | local repo=$1 44 | 45 | git -C corpus/$repo.git log --min-parents=1 --max-parents=1 --format='%P..%H' HEAD 46 | } 47 | 48 | # Generate all commit pairs for a repository that contain sliders that 49 | # have been rated. Output is pairs of commits in the format 50 | # 51 | # $old_sha..$new_sha 52 | # 53 | # usage: rated_diffs repo 54 | rated_diffs() { 55 | local repo=$1 56 | 57 | cat corpus/$repo-human.sliders | 58 | while read old new prefix line_number shifts 59 | do 60 | echo "${old%%:*}..${new%%:*}" 61 | done | 62 | sort | 63 | uniq 64 | } 65 | 66 | # Process a single repository. 67 | # 68 | # usage: compute_shifts repo algo_function 69 | compute_shifts() { 70 | local repo=$1 71 | local algo_function=$2 72 | 73 | while read old new prefix line_number shifts 74 | do 75 | $algo_function $repo "$old" "$new" | 76 | ./read-shift "$old" "$new" "$prefix" "$line_number" 77 | done 78 | } 79 | 80 | #compute_all_diffs=true 81 | compute_all_diffs=false 82 | 83 | #repos="alamofire couchdb lighttable neural-style test-more xmonad" 84 | repos="$(./repos)" 85 | 86 | if test $# != 0 87 | then 88 | algos="$*" 89 | else 90 | algos="290 290-compaction compaction-fixed indent-old indent-new-split indent-new" 91 | fi 92 | 93 | ./get-corpus 94 | 95 | for repo in $repos 96 | do 97 | echo >&2 "Processing $repo..." 98 | if $compute_all_diffs 99 | then 100 | sliders=corpus/$repo.sliders 101 | head_diffs $repo | 102 | ./enumerate-sliders --repo=$repo >$sliders 103 | else 104 | sliders=corpus/$repo-rated.sliders 105 | rated_diffs $repo | 106 | ./enumerate-sliders --repo=$repo | 107 | ./filter-sliders --only-rated=corpus/$repo-human.sliders >$sliders 108 | fi 109 | 110 | for algo in $algos 111 | do 112 | algo_function=git_$(echo $algo | tr '-' '_') 113 | cat $sliders | 114 | compute_shifts $repo $algo_function \ 115 | >corpus/$repo-$algo.sliders \ 116 | 2>corpus/$repo-$algo.err & 117 | done 118 | wait 119 | done 120 | 121 | ./summarize $algos 122 | -------------------------------------------------------------------------------- /corpus/alamofire-human.sliders: -------------------------------------------------------------------------------- 1 | 772af531b0391df404e1b524dbb61160b15ae0cb:Source/MultipartFormData.swift 14f74c3ad962102c7a2b6ce2ec2ebb3b547931e7:Source/MultipartFormData.swift + 445 0 2 | d2b85f4381e466d1106aa9d3085a9e77f2acb84d:Tests/AuthenticationTests.swift c2a282cc80cfd556159062aae3d2cd76b90e2db3:Tests/AuthenticationTests.swift + 123 0 3 | fd74161fdcaf3ca2bb9c6750f68617d6b592afcb:Alamofire.xcworkspace/contents.xcworkspacedata 559ef09b027108b2fead76badfa0890564b99db1:Alamofire.xcworkspace/contents.xcworkspacedata + 5 -1 4 | fd4648a4eef8791dad11dbc260ec39ec5bfd8e87:Source/MultipartFormData.swift 5a572db14da9d8c07c4b9aa8a3893c8bcc78aa61:Source/MultipartFormData.swift + 138 -1 5 | fe3a29941cd1f8d17a81a0843387743238d24d8f:Example/Images.xcassets/AppIcon.appiconset/Contents.json 88127becca2e492c60d83fe022cedefb8464ef2c:Example/Images.xcassets/AppIcon.appiconset/Contents.json + 10 -2 6 | 2f39b8634ab85cd6b3a55bbcfdec8cbb6463a6ee:Source/Alamofire.swift 950eda9688c0e5538dcc4c97c2cdd45946a33f66:Source/Alamofire.swift + 1143 -1 7 | 1f751881b65fd6587dbb979aa0a733dc64a55e0a:CHANGELOG.md f73b0f829463df2293044659f48e7a817cb86aa1:CHANGELOG.md + 12 -2 0 8 | 92bbee0edbd07218cdb75a9610659f7682de74c3:Tests/RequestTests.swift c3d1aa39223a1843d25b3cd39acf11f2eda741f9:Tests/RequestTests.swift + 56 0 9 | 5a572db14da9d8c07c4b9aa8a3893c8bcc78aa61:Source/MultipartFormData.swift 7de9fe9e96c8701dbcb53af1420a4a57eb473d8d:Source/MultipartFormData.swift + 162 -5 10 | f2a8a1c84f31b818ba441070853d0d162ea889c3:Source/Alamofire.swift 5b94f2a2f1a368a63db2e692b9004a236560c0f3:Source/Alamofire.swift + 154 -2 0 11 | 7d8484d9e581ea95b46d530624cec6db65a70b02:Source/NetworkReachabilityManager.swift 57f387b58dbe92c99cc59bf14ec45fd1b4a4c19a:Source/NetworkReachabilityManager.swift - 27 -1 12 | 2ff5749ffc0425f05a1411b5b6fd2c25241b5b14:Source/Alamofire.swift af1e24c3835edfe65626ab27422f3a6186ad526f:Source/Alamofire.swift - 1371 -3 13 | fe3a29941cd1f8d17a81a0843387743238d24d8f:Example/Images.xcassets/AppIcon.appiconset/Contents.json 88127becca2e492c60d83fe022cedefb8464ef2c:Example/Images.xcassets/AppIcon.appiconset/Contents.json + 62 0 14 | 7b2379165def9c3eb7c21fc0561ba02e48d0c2d6:Source/Alamofire.swift d337018a5bf1e8a2d720dbe22846647e3f13e8a4:Source/Alamofire.swift - 1385 -3 15 | bc6a58d7695740d1de8a66535997b8a5db79c70c:Tests/DownloadTests.swift da237ff228c9c4c4e80643aef96efb8e5f9dfcff:Tests/DownloadTests.swift + 81 0 16 | b69959b8ad129057a9f4f313a0ccc7772902ee65:Tests/RequestTests.swift 2401f6c92b99df28a250026409a061936b44ab4b:Tests/RequestTests.swift + 253 -2 0 17 | 1f66a59266cb05c277201b59d280bab96e87bb2e:Source/Alamofire.swift 930a91d52eb8bb15446f0d41d7103e81d2311ed1:Source/Alamofire.swift - 89 -3 -1 18 | b5cce2c5cdd22bd5d58502f4dbcb23dbaa7b62d6:Alamofire.xcworkspace/contents.xcworkspacedata 52dae79cf6c8279d6ae7c65ca473475087b32553:Alamofire.xcworkspace/contents.xcworkspacedata - 5 -1 19 | 5f2c29751b35069ec1452046e24dfba506cbc603:Source/ResponseSerialization.swift d58446edf8d1b204de40e900f11214dc0525d567:Source/ResponseSerialization.swift + 71 -3 20 | bc6a58d7695740d1de8a66535997b8a5db79c70c:Tests/UploadTests.swift da237ff228c9c4c4e80643aef96efb8e5f9dfcff:Tests/UploadTests.swift + 47 0 21 | ae1e1148ba41f1b20b922f3a49edd1e7bb01a93c:Source/Alamofire.swift 0d33dbf756fb2b41a270aa82474e1e7dafc8040f:Source/Alamofire.swift + 124 -2 0 22 | fe3a29941cd1f8d17a81a0843387743238d24d8f:Example/Images.xcassets/AppIcon.appiconset/Contents.json 88127becca2e492c60d83fe022cedefb8464ef2c:Example/Images.xcassets/AppIcon.appiconset/Contents.json + 29 -1 23 | be764884cf095e1abd0a6691f8b6c0329bd996b0:Source/Alamofire.swift dafd818a9e50d9f7a53b4a715e770b4e7655a477:Source/Alamofire.swift + 298 -1 24 | fe3a29941cd1f8d17a81a0843387743238d24d8f:Example/Images.xcassets/AppIcon.appiconset/Contents.json 88127becca2e492c60d83fe022cedefb8464ef2c:Example/Images.xcassets/AppIcon.appiconset/Contents.json + 20 -2 25 | 57d14bd78a0edd45858dd4ab1dcef51d2ba67324:README.md 8807fb86bf2e6f8ba979c3ab23bc3903eeab3c15:README.md + 694 -2 0 26 | 8b6484a5bfae6f96a21c600aa44e8379c275f8a1:Source/Alamofire.swift 5be585cf23f6c12224ac010820a1a8dd73e907e6:Source/Alamofire.swift + 1165 -1 27 | 2dd2f6f6186b98f27b75479b15c109ebd4dd8b52:Tests/ResponseTests.swift 445a4ec908aa2b44b13602b2b71e99378084293f:Tests/ResponseTests.swift + 47 0 28 | 2ff5749ffc0425f05a1411b5b6fd2c25241b5b14:Source/Alamofire.swift af1e24c3835edfe65626ab27422f3a6186ad526f:Source/Alamofire.swift - 1458 -3 29 | fd2eeb7f235c8ce7cc24cb322e94c01ed4291825:README.md 02625150e99a3517d7304d6dff037c4adfa77155:README.md + 646 -1 30 | 5f2c29751b35069ec1452046e24dfba506cbc603:Source/Validation.swift d58446edf8d1b204de40e900f11214dc0525d567:Source/Validation.swift + 28 -1 31 | -------------------------------------------------------------------------------- /compare-shifts: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | """Compare various choices of shift for sliders. 4 | 5 | usage: 6 | 7 | compare-shifts --repo=REPO [=PATH...] 8 | 9 | where each PATH is a *.sliders file with or without shifts, and is 10 | the character with which that file's shift will be presented. If PATH 11 | is '-', read that column from stdin. 12 | 13 | """ 14 | 15 | import sys 16 | import os 17 | import io 18 | import re 19 | import argparse 20 | from collections import OrderedDict 21 | 22 | sys.path.insert(0, os.path.dirname(sys.argv[0])) 23 | 24 | import diff_heuristics 25 | from diff_heuristics import SliderName 26 | 27 | 28 | def main(args): 29 | parser = argparse.ArgumentParser( 30 | description='Read a slider shift from a diff' 31 | ) 32 | parser.add_argument('--repo', type=str, required=True) 33 | parser.add_argument( 34 | '--all', '-a', action='store_true', 35 | help='show all sliders', 36 | ) 37 | parser.add_argument( 38 | '--any-wrong', action='store_true', 39 | help=( 40 | 'show sliders for which the correct values are known ' 41 | 'and any shift disagrees with them' 42 | ), 43 | ) 44 | parser.add_argument( 45 | '--any-nonzero', action='store_true', 46 | help='show sliders for which any shift differs from zero', 47 | ) 48 | parser.add_argument( 49 | '--controversial', action='store_true', 50 | help=( 51 | 'show sliders for which the correct values are not known ' 52 | 'and some shifts disagree with each other' 53 | ) 54 | ) 55 | parser.add_argument( 56 | '--no-diff', dest='diff', action='store_false', 57 | help='suppress output of the diff', 58 | ) 59 | parser.add_argument('--correct', type=str) 60 | parser.add_argument('--verbose', '-v', action='store_true') 61 | parser.add_argument('columns', nargs='+') 62 | 63 | options = parser.parse_args(args) 64 | 65 | if options.verbose: 66 | diff_heuristics.verbose = True 67 | 68 | column_names = [] 69 | 70 | # A dict {(old, new, prefix, line_number) : {column_name : shift}}: 71 | all_shifts = OrderedDict() 72 | 73 | slider_intern = {} 74 | 75 | for column in options.columns: 76 | (column_name, path) = column.split('=', 1) 77 | column_names.append(column_name) 78 | if path == '-': 79 | source = SliderName.read(sys.stdin) 80 | elif not os.path.isfile(path): 81 | sys.stderr.write('Skipping non-existing file %r\n' % (path,)) 82 | continue 83 | else: 84 | source = SliderName.read(open(path)) 85 | 86 | for (slidername, shifts) in source: 87 | slidername = slider_intern.setdefault(slidername, slidername) 88 | all_shifts.setdefault(slidername, {})[column_name] = shifts 89 | 90 | del slider_intern 91 | 92 | differences = 0 93 | 94 | for (slidername, values) in all_shifts.items(): 95 | columns = [] 96 | shifts_seen = set() 97 | correct = None 98 | for column_name in column_names: 99 | shifts = values.get(column_name, []) 100 | 101 | if options.correct and column_name == options.correct: 102 | correct = set(shifts) 103 | for shift in shifts: 104 | columns.append((column_name, shift)) 105 | else: 106 | for shift in shifts: 107 | columns.append((column_name, shift)) 108 | shifts_seen.add(shift) 109 | 110 | if ( 111 | options.all 112 | or options.any_wrong and correct and shifts_seen - correct 113 | or options.any_nonzero and list(shifts_seen) != [0] 114 | or options.controversial and not correct and len(shifts_seen) != 1 115 | ): 116 | slider = slidername.compute_slider('corpus/%s.git' % (options.repo,)) 117 | 118 | slidername.write(sys.stdout) 119 | if options.diff: 120 | print('# %s' % ('v' * 60,)) 121 | slider.show_comparison(columns, line_prefix='# ') 122 | print('# %s' % ('^' * 60,)) 123 | print('#') 124 | 125 | differences += 1 126 | 127 | if options.correct: 128 | print( 129 | 'Number of incorrect shifts: %d' % (differences,), 130 | file=sys.stderr 131 | ) 132 | 133 | 134 | if __name__ == '__main__': 135 | main(sys.argv[1:]) 136 | -------------------------------------------------------------------------------- /summarize: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | """Summarize the results of various heuristics. 4 | 5 | usage: summarize ALGO... 6 | 7 | where ALGO is the name of an algorithm to include in the comparison 8 | (which really just tells which slider files to read). 9 | 10 | """ 11 | 12 | import sys 13 | import os 14 | import subprocess 15 | import argparse 16 | 17 | MAIN_DIR = os.path.dirname(sys.argv[0]) 18 | sys.path.insert(0, MAIN_DIR) 19 | 20 | import diff_heuristics 21 | from diff_heuristics import SliderName 22 | from diff_heuristics import iter_file_diffs 23 | from diff_heuristics import compute_diff 24 | 25 | 26 | def count_corpus(repo): 27 | return len(list(open('corpus/%s-human.sliders' % (repo,)))) 28 | 29 | 30 | def count_incorrect(repo, algo): 31 | filename = 'corpus/%s-%s.sliders' % (repo, algo,) 32 | if not os.path.isfile(filename): 33 | sys.stderr.write('Warning: file %r does not exist!\n' % (filename,)) 34 | return None 35 | 36 | cmd = [ 37 | './compare-shifts', 38 | '--repo', repo, 39 | '--correct=h', '--any-wrong', '--no-diff', 40 | 'h=corpus/%s-human.sliders' % (repo,), 41 | 'x=corpus/%s-%s.sliders' % (repo, algo,), 42 | ] 43 | return len( 44 | subprocess.check_output( 45 | cmd, stderr=open('/dev/null', 'w'), 46 | ).splitlines() 47 | ) 48 | 49 | 50 | numbers_column_width = 14 51 | 52 | 53 | def numbers(value, total): 54 | if value is None or total is None or total == 0: 55 | return '%*s' % (numbers_column_width, 'n/a') 56 | else: 57 | percentage = '(%.1f%%)' % (100.0 * value / total,) 58 | return '%5d %8s' % (value, percentage,) 59 | 60 | 61 | def summarize(f, repos, algos, training_set=None): 62 | column_widths = [ 63 | max(numbers_column_width, len(algo)) 64 | for algo in algos 65 | ] 66 | corpus_sum = 0 67 | sums = [0] * len(algos) 68 | corpus_training_set_sum = 0 69 | training_set_sums = [0] * len(algos) 70 | corpus_other_sum = 0 71 | other_sums = [0] * len(algos) 72 | 73 | f.write('| %-21s | %s ' % ('repository', 'count')) 74 | for (i, algo) in enumerate(algos): 75 | f.write('| %*s ' % (column_widths[i], algo,)) 76 | f.write('|\n') 77 | 78 | f.write('| --------------------- | ----: ') 79 | for (i, algo) in enumerate(algos): 80 | f.write('| %s: ' % ('-' * (column_widths[i] - 1),)) 81 | f.write('|\n') 82 | 83 | for repo in repos: 84 | in_training_set = training_set and repo in training_set 85 | ntot = count_corpus(repo) 86 | corpus_sum += ntot 87 | if in_training_set: 88 | corpus_training_set_sum += ntot 89 | else: 90 | corpus_other_sum += ntot 91 | f.write('| %-21s | %5d ' % (repo, ntot,)) 92 | for (i, algo) in enumerate(algos): 93 | n = count_incorrect(repo, algo) 94 | f.write('| %*s ' % (column_widths[i], numbers(n, ntot),)) 95 | if n is not None: 96 | if sums[i] is not None: 97 | sums[i] += n 98 | if in_training_set: 99 | training_set_sums[i] += n 100 | else: 101 | other_sums[i] += n 102 | else: 103 | sums[i] = None 104 | if in_training_set: 105 | training_set_sums[i] = None 106 | else: 107 | other_sums[i] = None 108 | f.write('|') 109 | if in_training_set: 110 | f.write(' *') 111 | f.write('\n') 112 | 113 | f.write('| --------------------- | ----- ') 114 | for (i, algo) in enumerate(algos): 115 | f.write('| %s ' % ('-' * column_widths[i],)) 116 | f.write('|\n') 117 | 118 | f.write('| %-21s | %5d ' % ('totals', corpus_sum,)) 119 | for (i, algo) in enumerate(algos): 120 | n = sums[i] 121 | f.write('| %*s ' % (column_widths[i], numbers(n, corpus_sum),)) 122 | f.write('|\n') 123 | 124 | if training_set: 125 | f.write('| %-21s | %5d ' % ('totals (training set)', corpus_training_set_sum,)) 126 | for (i, algo) in enumerate(algos): 127 | n = training_set_sums[i] 128 | f.write('| %*s ' % (column_widths[i], numbers(n, corpus_training_set_sum),)) 129 | f.write('|\n') 130 | 131 | f.write('| %-21s | %5d ' % ('totals (test set)', corpus_other_sum,)) 132 | for (i, algo) in enumerate(algos): 133 | n = other_sums[i] 134 | f.write('| %*s ' % (column_widths[i], numbers(n, corpus_other_sum),)) 135 | f.write('|\n') 136 | f.write('\n') 137 | f.write(' * - repo was part of training set\n') 138 | 139 | 140 | def main(args): 141 | repos = [ 142 | line.strip() 143 | for line in subprocess.check_output( 144 | ['./repos'], 145 | universal_newlines=True, 146 | ).splitlines() 147 | ] 148 | 149 | algos = args 150 | 151 | # corpus/training-set can be a file listing the repos that were 152 | # used when training the heuristic: 153 | if os.path.isfile('corpus/training-set'): 154 | training_set = [ 155 | line.rstrip() 156 | for line in open('corpus/training-set') 157 | ] 158 | else: 159 | training_set = None 160 | 161 | summarize(sys.stdout, repos, algos, training_set=training_set) 162 | 163 | if __name__ == '__main__': 164 | main(sys.argv[1:]) 165 | 166 | 167 | -------------------------------------------------------------------------------- /corpus/test-unit-human.sliders: -------------------------------------------------------------------------------- 1 | 6644e50de9b249fb4229d27bd1799b8a3981f81e:test/test-fault-location-detector.rb 2040929fe51b57a8737a2f8340f4b16067f1ca7b:test/test-fault-location-detector.rb + 129 0 2 | b140b1fdf9457f545b2104441f3d1c3cd364ef54:doc/po/ja.po cb9d586b19e3734ae2e89494db19540a895ac165:doc/po/ja.po + 304 -1 3 | 4d9bba209a9ebed9af3be32c1399a3c66a46ae8f:doc/po/ja.po 7f40cb524752ab80910b2b9416c502b501fac014:doc/po/ja.po + 2866 0 4 | 4d9bba209a9ebed9af3be32c1399a3c66a46ae8f:doc/po/ja.po 7f40cb524752ab80910b2b9416c502b501fac014:doc/po/ja.po + 2882 0 5 | 4d9bba209a9ebed9af3be32c1399a3c66a46ae8f:doc/po/ja.po 7f40cb524752ab80910b2b9416c502b501fac014:doc/po/ja.po + 3248 0 6 | 4d9bba209a9ebed9af3be32c1399a3c66a46ae8f:doc/po/ja.po 7f40cb524752ab80910b2b9416c502b501fac014:doc/po/ja.po + 3569 0 7 | 4d9bba209a9ebed9af3be32c1399a3c66a46ae8f:doc/po/ja.po 7f40cb524752ab80910b2b9416c502b501fac014:doc/po/ja.po + 3849 0 8 | 4d9bba209a9ebed9af3be32c1399a3c66a46ae8f:doc/po/ja.po 7f40cb524752ab80910b2b9416c502b501fac014:doc/po/ja.po + 3934 0 9 | a14b448924b0fd6ae059c68d4ec0e3ed4b32ecc7:lib/test/unit/assertions.rb 6f932bc42435ebdb9c94e2825e50163b53bf93af:lib/test/unit/assertions.rb + 367 -1 10 | bd803a9bf4ef8df6e4b59bddd5ec8baaf0036b57:doc/po/ja.po 2343418244fc9a27ea61a9273455807f5cf36f43:doc/po/ja.po - 32518 -1 11 | fab34c57d2293e77364b1e99301898304f1860dc:doc/po/ja.po adef1255ab83012231f6b529fde971753cffb2d9:doc/po/ja.po + 29877 -1 12 | d7b28dde000ae1a467d34849d875254c51c0d287:doc/po/ja.po 32d1255e46aab0d3fce48311648b8733840159e2:doc/po/ja.po - 26421 -1 13 | 4e211c33155b075c2e070d26ecbf8aef686166e6:doc/po/ja.po 1f9875b84a8b556d0728f0878045193b48990b88:doc/po/ja.po + 26421 -1 14 | 4d24d3b54d64500e1a5ec5ee38fbb5c2d02873c5:doc/po/ja.po 7f8a4342c417270b6ae87b1d9bbf36e647e8bd7e:doc/po/ja.po - 26408 -1 15 | d531f54538938bc28decbebb17b9024933391346:doc/po/ja.po 3cadc57498bc98a9e4bc8595524a2b116d535dd6:doc/po/ja.po + 28647 -1 16 | d531f54538938bc28decbebb17b9024933391346:doc/po/ja.po 3cadc57498bc98a9e4bc8595524a2b116d535dd6:doc/po/ja.po + 37175 -2 17 | 372ec9c39403570f2e848fc604da8c9d520a15b6:html/index.html 7a138a9731bd976e6c6aea0b02fe1ffa788229d5:html/index.html - 43 -1 18 | 372ec9c39403570f2e848fc604da8c9d520a15b6:html/index.html.ja 7a138a9731bd976e6c6aea0b02fe1ffa788229d5:html/index.html.ja - 43 -1 19 | d2c9866095513c35f3517caea7891aef92b0dcb8:lib/test/unit/assertions.rb 9eb9aad3dc03fdad5fad81b29a81f7f792f8b681:lib/test/unit/assertions.rb + 1254 -1 20 | b2345bd04cc3d68234486fe11f6563b449091367:lib/test/unit/assertions.rb d2c9866095513c35f3517caea7891aef92b0dcb8:lib/test/unit/assertions.rb + 1231 -1 21 | c8fe9da9380a0e7b873213f88368926462fc6048:lib/test/unit/assertions.rb b2345bd04cc3d68234486fe11f6563b449091367:lib/test/unit/assertions.rb + 1209 -1 22 | 5e1f1d40ec61417d5d3197b035465958c6b6506f:lib/test/unit/assertions.rb beb5dd9dc4552cef84c3ddacb31db7c322b03e59:lib/test/unit/assertions.rb + 1187 -1 23 | 861af3b048fd518a66ed01da27a7e94971ed0073:lib/test/unit/assertions.rb 679d8af115b2eac1436a7d6208f1ef0e58df46da:lib/test/unit/assertions.rb + 722 -1 24 | c9d4629d13920f58f787e6600f95c9d7f88bc39b:lib/test/unit/assertions.rb 8f156ded038e96e4b63e2d4bc7d7c10d57562823:lib/test/unit/assertions.rb + 305 -1 25 | c0dce8cbf4574e6e22cc569b06f16c590c9ec236:html/index.html 492e1257e614dd4770864d597eb0f2f4a938f7a7:html/index.html + 43 -1 26 | c0dce8cbf4574e6e22cc569b06f16c590c9ec236:html/index.html.ja 492e1257e614dd4770864d597eb0f2f4a938f7a7:html/index.html.ja + 43 -1 27 | 02b2f209f4439f67cb00a226ed8cea7b3b755640:html/index.html 49665b3a3c015b67cfc1063156181a6e6aa14a1e:html/index.html + 21 -1 28 | 9622ed04df519585dabf8e0012b2c08ca5f5665f:lib/test/unit/assertions.rb 2ccc0ec309c29c8d60c46de7746272baf6354e1f:lib/test/unit/assertions.rb + 918 -1 29 | 77eab58e5904d91796282be05c84dab5449be7a3:test/collector/test-load.rb 907c9e10677f42623075d15376a59c0b5bf06965:test/collector/test-load.rb + 245 0 30 | ee75ae9e41e1bec2250694bb579291e97f3c66fe:test/collector/test-load.rb 77eab58e5904d91796282be05c84dab5449be7a3:test/collector/test-load.rb + 219 0 31 | 4982d0729a07e3d77979ed150a7b1d1bdb786a7b:test/collector/test-load.rb 17d015181f527e06a009172839bd3259285813f0:test/collector/test-load.rb + 199 0 32 | 4e423431dcec2e1a4f1f847d3485b3f4c1b8df65:lib/test/unit/assertions.rb 3e95cec70eaf201a827deeb087193ae7498354a2:lib/test/unit/assertions.rb + 802 -1 33 | 6576868b7a6c079365150ecfedddeb1b2c6167a3:lib/test/unit/assertions.rb 78c82752c9205c26c343a8d7453ccb524fbe03d8:lib/test/unit/assertions.rb + 699 -1 34 | 29b5e3e8b3a8a26eaf651d4fe091f1cef39cf918:lib/test/unit/assertions.rb 52248b8ba5ae632b052c89aa54ecd9cf1d6f4557:lib/test/unit/assertions.rb + 676 -1 35 | 25b303e79b31b1dbf399bd152ae3fedecd62d118:lib/test/unit/assertions.rb 29b5e3e8b3a8a26eaf651d4fe091f1cef39cf918:lib/test/unit/assertions.rb + 659 -1 36 | 5af7c91b22b4cfbcdbe5f275cb90a03f7905f82f:lib/test/unit/assertions.rb 899108db778e93a1467628182585a1fe541ea284:lib/test/unit/assertions.rb + 433 -1 37 | ebe17d8e2163b56006cd356c494118ddc13dfe84:lib/test/unit/assertions.rb 8c21bab7148379b0203bc6e4b37a3683a2cf7e7e:lib/test/unit/assertions.rb + 130 -1 38 | 0ae3800be7ca632c47c089d527b53a8f66960c60:test/test_assertions.rb c35d9e2de60441cae592a300dae1460b45562cce:test/test_assertions.rb - 120 -1 39 | 9a090fc579b95badbcf6936bb64a9cff55eff455:lib/test/unit/assertions.rb 0ae3800be7ca632c47c089d527b53a8f66960c60:lib/test/unit/assertions.rb + 618 -1 40 | 9d3d8379ebc4acf4255e1922ea7cdab8fde8c832:lib/test/unit/assertions.rb 9a090fc579b95badbcf6936bb64a9cff55eff455:lib/test/unit/assertions.rb + 597 -1 41 | 37249726d9da3dce82b3784de00efdc2be51b319:lib/test/unit/assertions.rb 9d3d8379ebc4acf4255e1922ea7cdab8fde8c832:lib/test/unit/assertions.rb + 563 -1 42 | c53ebd08e663753f536483c9eed9aeb5937c7f4b:lib/test/unit/assertions.rb 9f80361a7afbc2d41369593e980e441d1d311430:lib/test/unit/assertions.rb + 531 -1 43 | b28a5eeba154b6f3c35218c9efc2e863f640ed4b:lib/test/unit/assertions.rb ac785194f2832f8ce0706f5625fa49ed3642a305:lib/test/unit/assertions.rb + 515 -1 44 | fc639ce994e76bab685f74936b6b690841ab97d7:test/test_emacs_runner.rb 981e67bbc8e54fb6c573cba9538a2bdbe9483dd9:test/test_emacs_runner.rb + 36 0 45 | f10baf0a42af625c1b601e5ca1d57a60e061fce9:test/test-priority.rb d4b060a093ff6dd3b9d49467f0aea8a11775d901:test/test-priority.rb + 120 9 46 | 62c3598ce0d55ee90dedfc261208d284a03cebff:test/test-testcase.rb 6af0cf080e471c16d5a7431e15e9e9df7eefd10b:test/test-testcase.rb - 682 0 47 | 62c3598ce0d55ee90dedfc261208d284a03cebff:test/test-testcase.rb 6af0cf080e471c16d5a7431e15e9e9df7eefd10b:test/test-testcase.rb - 698 0 48 | 42bf939c2cb784c8b81845b380b889d89b528c56:test/test-testcase.rb 7a12bffdf9a47f6c2679c0f4c3a979c36e5138ad:test/test-testcase.rb + 644 0 49 | 42bf939c2cb784c8b81845b380b889d89b528c56:test/test-testcase.rb 7a12bffdf9a47f6c2679c0f4c3a979c36e5138ad:test/test-testcase.rb + 660 0 50 | 42bf939c2cb784c8b81845b380b889d89b528c56:test/test-testcase.rb 7a12bffdf9a47f6c2679c0f4c3a979c36e5138ad:test/test-testcase.rb + 676 0 51 | 42bf939c2cb784c8b81845b380b889d89b528c56:test/test-testcase.rb 7a12bffdf9a47f6c2679c0f4c3a979c36e5138ad:test/test-testcase.rb + 708 0 52 | -------------------------------------------------------------------------------- /optimize-weights: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | """Optimize the heuristic weights by testing against hand-generated data. 4 | 5 | usage: 6 | 7 | optimize-weights OPTIONS ... 8 | 9 | """ 10 | 11 | import sys 12 | import os 13 | import argparse 14 | import random 15 | 16 | sys.path.insert(0, os.path.dirname(sys.argv[0])) 17 | 18 | import diff_heuristics 19 | from diff_heuristics import SliderName 20 | from diff_heuristics import SplitMeasurements 21 | from diff_heuristics import DefaultSplitScorer as SplitScorer 22 | from diff_heuristics import load_scores 23 | 24 | 25 | def main(args): 26 | parser = argparse.ArgumentParser( 27 | description='Read a slider shift from a diff' 28 | ) 29 | parser.add_argument( 30 | '--step', dest='steps', type=int, action='append', 31 | help='deltas to apply to parameters when perturbing them', 32 | ) 33 | parser.add_argument( 34 | '--max-perturbations', type=int, default=1, 35 | help='the number of parameters to perturb at once' 36 | ) 37 | parser.add_argument( 38 | '--vary', action='append', 39 | choices=SplitScorer.get_parameter_names() + [ 40 | name.replace('_', '-') 41 | for name in SplitScorer.get_parameter_names() 42 | ], 43 | help='parameters that should be varied as part of the optimization', 44 | ) 45 | parser.add_argument( 46 | '--freeze', action='append', 47 | choices=SplitScorer.get_parameter_names() + [ 48 | name.replace('_', '-') 49 | for name in SplitScorer.get_parameter_names() 50 | ], 51 | help='parameters that should be frozen at their initial values', 52 | ) 53 | parser.add_argument( 54 | '--iterations', type=int, default=1, 55 | help='the number of times to repeat the optimization step', 56 | ) 57 | parser.add_argument( 58 | '--batch-limit', type=int, default=1000, 59 | help='the maximum number of scorers to test per iteration', 60 | ) 61 | parser.add_argument( 62 | '--keep', type=int, default=20, 63 | help='the number of best scorers to perturb between iterations', 64 | ) 65 | parser.add_argument( 66 | '--cull', metavar='delta', type=int, default=None, 67 | help=( 68 | 'discard scorers whose score is more than DELTA worse ' 69 | 'than the best score seen so far' 70 | ), 71 | ) 72 | parser.add_argument( 73 | '--load', action='append', 74 | help='load scores from these files before starting', 75 | ) 76 | parser.add_argument( 77 | '--seed', type=int, default=20, 78 | help='seed the iteration with SEED of the best loaded scorers', 79 | ) 80 | parser.add_argument( 81 | 'repos', nargs='+', 82 | help='corpus repositories to use for testing', 83 | ) 84 | parser.add_argument( 85 | '--verbose', '-v', action='store_true', 86 | help='increase verbosity', 87 | ) 88 | SplitScorer.add_arguments(parser) 89 | 90 | options = parser.parse_args(args) 91 | 92 | if options.verbose: 93 | diff_heuristics.verbose = True 94 | 95 | if not options.steps: 96 | options.steps = [-1, 1] 97 | 98 | if options.freeze and options.vary: 99 | parser.error('--freeze and --vary are incompatible') 100 | elif options.freeze: 101 | omit = set(name.replace('-', '_') for name in options.freeze) 102 | vary_parameters = [ 103 | name 104 | for name in SplitScorer.get_parameter_names() 105 | if not name in omit 106 | ] 107 | elif options.vary: 108 | vary_parameters = [name.replace('-', '_') for name in options.vary] 109 | else: 110 | vary_parameters = SplitScorer.get_parameter_names() 111 | 112 | collected_scores = dict() 113 | 114 | if options.load: 115 | for filename in options.load: 116 | collected_scores.update(load_scores(filename)) 117 | 118 | if collected_scores and options.seed: 119 | sorted_scorers = sorted( 120 | collected_scores, 121 | key=lambda scorer: (collected_scores[scorer],) 122 | ) 123 | 124 | best_scorer = sorted_scorers[0] 125 | best_score = collected_scores[best_scorer] 126 | print('Best score so far: %d %r' % (best_score, best_scorer,), file=sys.stderr) 127 | 128 | try: 129 | last = sorted_scorers[options.keep - 1] 130 | except IndexError: 131 | last = sorted_scorers[-1] 132 | 133 | threshold = collected_scores[last] 134 | base_scorers = [ 135 | scorer 136 | for scorer in sorted_scorers 137 | if collected_scores[scorer] <= threshold 138 | ] 139 | else: 140 | base_scorers = [SplitScorer.from_options(options)] 141 | best_score = None 142 | 143 | for iteration in range(options.iterations): 144 | scorers = set() 145 | for base_scorer in base_scorers: 146 | for scorer in base_scorer.iter_perturbed( 147 | options.steps, vary_parameters=vary_parameters, 148 | max_perturbations=options.max_perturbations, 149 | ): 150 | if scorer not in collected_scores: 151 | scorers.add(scorer) 152 | scorers = list(scorers) 153 | 154 | if len(scorers) == 0: 155 | break 156 | elif len(scorers) > options.batch_limit: 157 | scorers = random.sample(scorers, options.batch_limit) 158 | 159 | print( 160 | 'Iteration %d: %d new scorers to test (%d tested already).' % ( 161 | iteration, len(scorers), len(collected_scores) 162 | ), 163 | file=sys.stderr, 164 | ) 165 | 166 | error_counts = dict((scorer, 0) for scorer in scorers) 167 | 168 | for repo in options.repos: 169 | with open('corpus/%s-human.sliders' % (repo,)) as f: 170 | for (slidername, shifts) in SliderName.read(f): 171 | correct = set(shifts) 172 | 173 | try: 174 | slider = slidername.compute_slider( 175 | 'corpus/%s.git' % (repo,) 176 | ) 177 | except diff_heuristics.ParsingError as e: 178 | sys.stderr.write( 179 | 'Error parsing slider %s: %s\n' % ( 180 | slidername, e, 181 | ) 182 | ) 183 | else: 184 | slider.shift_canonically() 185 | 186 | i = 0 187 | while i < len(scorers): 188 | scorer = scorers[i] 189 | shift = slider.find_best_shift(scorer) 190 | if shift not in correct: 191 | error_counts[scorer] += 1 192 | if ( 193 | options.cull is not None 194 | and best_score is not None 195 | and error_counts[scorer] > best_score + options.cull 196 | ): 197 | del error_counts[scorer] 198 | del scorers[i] 199 | collected_scores[scorer] = None 200 | sys.stderr.write('%d.' % (len(scorers),)) 201 | else: 202 | i += 1 203 | else: 204 | i += 1 205 | 206 | sys.stderr.write('.') 207 | sys.stderr.flush() 208 | sys.stderr.write('\n') 209 | 210 | if not scorers: 211 | break 212 | 213 | sorted_scorers = sorted( 214 | scorers, 215 | key=lambda scorer: (error_counts[scorer], repr(scorer)) 216 | ) 217 | 218 | best_scorer = sorted_scorers[0] 219 | error_count = error_counts[best_scorer] 220 | if best_score is None or error_count < best_score: 221 | best_score = error_count 222 | print('Best: %d %r' % (error_count, best_scorer,), file=sys.stderr) 223 | print('Best score so far: %d' % (best_score,), file=sys.stderr) 224 | 225 | for scorer in sorted_scorers: 226 | error_count = error_counts[scorer] 227 | print('%4d %r' % (error_count, scorer,)) 228 | collected_scores[scorer] = error_count 229 | 230 | sys.stdout.flush() 231 | 232 | try: 233 | last = sorted_scorers[options.keep - 1] 234 | except IndexError: 235 | last = sorted_scorers[-1] 236 | 237 | threshold = error_counts[last] 238 | base_scorers = [ 239 | scorer 240 | for scorer in sorted_scorers 241 | if error_counts[scorer] <= threshold 242 | ] 243 | 244 | 245 | if __name__ == '__main__': 246 | main(sys.argv[1:]) 247 | -------------------------------------------------------------------------------- /corpus/magit-human.sliders: -------------------------------------------------------------------------------- 1 | 772f29f14fdce80b01578630dfc1452ae82e18b3:magit-remote.el fc5be240e2232ed9e4dec8e36f2391bd14396e90:magit-remote.el + 71 -1 2 | 4ef579361cebb4364c21b0bd55bec4df93525228:magit-log.el ab1946fdce49987fbe40af9b2cabf6a3348c354f:magit-log.el + 419 -1 3 | 52f858ac839c8e3c418d00428da14781c6ddfbcc:Documentation/magit.texi 1fc986ed2be41054dbbc2f3fe1f7429cb098ba6f:Documentation/magit.texi + 833 -1 4 | 60a3843415ff86a1ce32f648a0f12ae352b547b7:Documentation/magit.texi 112b0eb00ed92417c1f06e8e6d042ef810494e10:Documentation/magit.texi - 2695 -1 5 | e494ac4259b6673526ad10e70f12a8982897576b:magit-diff.el f99e2f4531aa7343427acf5b49df5f4189bf0234:magit-diff.el + 394 -1 6 | c696d3de42ccd3146d1afed659ca2676cd4c3662:magit-log.el aa6c9c30b3cf79334e699c435331c079bdde3943:magit-log.el + 376 -1 7 | 1d0d3fbbd13ddd6374815570f2b442ed1875c855:magit.el 7cc01d4c2e929ff5b645baad81ceec316c5dd8b9:magit.el + 767 -1 8 | 3753d07c8b1655c1a165a104d25ff9e7f1fdc6e5:lisp/magit.el e1ea467ec1817be2b89abd7226ac806eca7850d4:lisp/magit.el + 1090 -1 9 | f64ed3f18eb3ad1ece9bbd1a34f3c4db08be91de:lisp/magit.el 5f58266f30426a21abefe9e2eb6a3875110dff1a:lisp/magit.el - 1396 -1 10 | 45712322c1bd713a4172976bc40bb0d92366e410:magit.el 1c1434f3659c85e784400117f5dbc53d56b4512a:magit.el + 5583 0 11 | d4805bb9ff7a1fdad8508c500e0670d1f1bc2134:lisp/magit-submodule.el b33027152d49d3c29819b418a8679d06523d74d8:lisp/magit-submodule.el + 128 -1 12 | 0f5d4ca7c6a8de5b4ee73c7eecfce539ed547988:lisp/magit-remote.el a02d26a1b650a280313b33fd6d90a8fd701dacae:lisp/magit-remote.el + 201 -1 13 | 9a976216f07ee69516656afb0501985f411eb85f:magit.el f62d2a3703aee7123326097a2aab6b1be6bf4b5d:magit.el + 1192 -1 14 | 6dfc13df664d14a4d8f1ebf04cedd482f9a11402:magit-diff.el 458a06d8ff34fc2094e130aad37a26076422707d:magit-diff.el + 406 -1 15 | 24677b0c7a00a8903c9e2f4a16a6d952ee8702fa:magit.el d7ae65a5798e73c2a6eab971024e9f3f3c86545f:magit.el + 1376 -1 16 | 985a635ec012cd5e65f626583335257d0348921f:Documentation/magit.texi a61b8025568e876ce14f2985e8c0b9eb6c9ad4c9:Documentation/magit.texi - 2699 -1 17 | 39b9c35d021cf7c1b3460a3927aa8ecad3867e04:Documentation/magit-popup.texi be9d9c097be46af55aa12268e01741e3674677aa:Documentation/magit-popup.texi + 642 -1 18 | 7a1f57bb8740c9e86376e3c4cefa7b7cc9899802:magit-remote.el ba7a0e725f4c805a01b027372a455dbe4d2361a5:magit-remote.el - 78 -1 19 | 0f5d4ca7c6a8de5b4ee73c7eecfce539ed547988:lisp/magit-remote.el a02d26a1b650a280313b33fd6d90a8fd701dacae:lisp/magit-remote.el + 227 -1 20 | 702e2f738626bcaeddd2d07db84ad22f0a6a02be:magit-compat.el 447f45cff6812abf4caa293ed1ce0b28d6dcc6a8:magit-compat.el + 54 -1 21 | a0ee0fa79557ec734bbb01b48cb99bd969e4bdba:Documentation/magit.texi 05ca7a211ed79b79c23d53260bf746feeae4111a:Documentation/magit.texi + 5756 -1 22 | 607df69a1fa6758e186fe2bcc0d952515a6c80fe:magit.el 229de60a7cdc16cf6e620314d091e89d6ea83bb0:magit.el + 1562 -1 23 | 45712322c1bd713a4172976bc40bb0d92366e410:magit.el 1c1434f3659c85e784400117f5dbc53d56b4512a:magit.el + 5557 0 24 | 419eaaf74ebc1fd2f3916a7fa7231fab04a841d0:magit.el 2e8c1d5ecd4e60b7c164594deceb4068422e61e6:magit.el - 893 0 25 | a0ee0fa79557ec734bbb01b48cb99bd969e4bdba:Documentation/magit.texi 05ca7a211ed79b79c23d53260bf746feeae4111a:Documentation/magit.texi + 5778 -1 26 | b53ec459ceaf75b99fa6b1d31e7f848c7a07f50d:magit-remote.el 68710efe54f7d28969603291477ec61336b9e7b8:magit-remote.el - 206 -1 27 | 1cc3dfa320bd02ccc88d29b431d142f0204105c7:git-commit-mode.el 0b44b00b2a18d890d4cae0391564e4862c2a257f:git-commit-mode.el - 569 -1 28 | 73d23c449dd7e32f1d0cbf5b6f3064da1196adb1:git-commit.el ab16a674b7eab2fc4d522c66481b281e7ed470fa:git-commit.el + 605 -1 29 | 60a3843415ff86a1ce32f648a0f12ae352b547b7:Documentation/magit.texi 112b0eb00ed92417c1f06e8e6d042ef810494e10:Documentation/magit.texi - 2683 -1 30 | 32bf22a02622884b64c0fad64b500d8f86107b01:magit.el d20708f1efcb8c556cdabe1f22fe5ab89ba00a5b:magit.el + 5093 -1 31 | 138ac10b34797e2ded28b1fb80d1c5ace6dddbc7:magit.el 8a96fa09d1a82971c18bf126730587c394793852:magit.el + 39 0 32 | 49d077fc28e177eefca009fa694b64db438c8e41:git-rebase-mode.el 52abfc4cc040c2eec4e240bce2071d20b644a686:git-rebase-mode.el + 371 -1 33 | 62da84585314531d90d570dae6fdd12d57db9b20:lisp/magit-diff.el 89026a76931445bf9a8221eae608554fffbf99d9:lisp/magit-diff.el + 791 -1 34 | 5972682928469016bb16c28d2f8ac3c715fe7742:magit.el a5ec9174a894d15c1a3a4eb7c1a7bb0ab72435a0:magit.el + 7365 -1 35 | 0f5d4ca7c6a8de5b4ee73c7eecfce539ed547988:lisp/magit-remote.el a02d26a1b650a280313b33fd6d90a8fd701dacae:lisp/magit-remote.el - 311 -1 36 | 47aa73615da1bc8a559fae1bc0dff2799c8d7c83:Makefile 7b37a30eb041eb8fe7e86fb22a30b2b5c838a456:Makefile + 17 0 37 | baacfd6aca41c853637fee59c95836efa6d7b320:magit.el 3d40b745321fdfd1b5ce648d854ad1a8f2293d0c:magit.el + 4913 -1 38 | 871bf2f2d6432097703c335790538274f2a7b4c8:magit.el 138ac10b34797e2ded28b1fb80d1c5ace6dddbc7:magit.el + 804 0 39 | b9d9ba52e1ad3028a81d64273cfcf221dcc5f0fe:magit-log.el e0979bb6bd22a9ce5009a7cdf458034e52817da3:magit-log.el - 355 -1 40 | 9f873f6f1c69433072c9673d6449ed611ff0e8fd:magit-remote.el df86fc6fb09969e00be4344e42636d359652fc34:magit-remote.el - 88 -1 41 | 47b3fcec3a2e8cea2d9e796271a1d377c29884a6:magit-stgit.el fe781f7a5c47ba336d74ba7a360fc7771fa8def3:magit-stgit.el - 244 -1 42 | 3e77accab9a5af59ac30adeee0730179cf41f28e:magit.el 6e33fdf6c73d11545c9a44df8343916216b16918:magit.el - 1467 -1 43 | dd3f732b76d45b933b82028012a995250518c86c:magit-log.el a471cfb94c762a714570a86a75004770fb6214c3:magit-log.el + 414 -1 44 | 9f873f6f1c69433072c9673d6449ed611ff0e8fd:magit-remote.el df86fc6fb09969e00be4344e42636d359652fc34:magit-remote.el + 97 -1 45 | d2f6819febc4b2549e316cfd43e6158fafa74d09:Documentation/magit-popup.texi 749666655d0a80b6aa6d3d4e0181bfe6dc0454eb:Documentation/magit-popup.texi + 641 -1 46 | 9c09b28b02fdffb980cb7dd4f31f9c2049d88555:magit.el ded28395997508b03316d4cf194d8b09020141b6:magit.el + 5013 -1 47 | 7ad5c650d0549af16b813b9f718ee81baf855675:magit-stgit.el cdd0d6013c1f83fb38111bfefca76a60cfa0eb27:magit-stgit.el - 162 -1 48 | 759d2c63c38517a4dad2810975dfa1a4a5e5aa4b:lisp/magit-commit.el 0cf5becf903403e5a2d46b916d00eb90662e0b38:lisp/magit-commit.el + 192 -1 49 | 45712322c1bd713a4172976bc40bb0d92366e410:magit.el 1c1434f3659c85e784400117f5dbc53d56b4512a:magit.el + 5613 0 50 | f492bf520f9f4da0560c2b692b0d05a74b8f9aa7:magit.el 70512ae1cd9fb331e3d28720759605977c950fbb:magit.el + 1448 0 51 | 3c9bf2d30dd1d74a62f5f5844770484d488b1f79:lisp/magit-remote.el 5b00b1e22f136aca878468617f5dacfe4f6fde3d:lisp/magit-remote.el + 226 -1 52 | fae71211255f4f9f9d80850249604d893f0d3ffb:magit-key-mode.el 34d2821fe0e244c4cd07a1a9e9da55d33b6d6582:magit-key-mode.el - 511 -1 53 | f59f7aecfc6d38237c5d9eedbb9ed7e9c82e8ce4:magit.el 25210720cf0969ba769089bfab59101175b2bec3:magit.el - 6999 -1 54 | f72c3fdb3c7519447fee78e1edde3fdad65bdb85:Documentation/magit-popup.texi 39b9c35d021cf7c1b3460a3927aa8ecad3867e04:Documentation/magit-popup.texi - 627 -1 55 | c236092857ffaf456b2ef0cffaba9a195c8ec295:magit.el f2e8155904be611045f691c1ab1bc14326de8f09:magit.el - 39 0 56 | 7937f0aba26535c096b60238ee945aa6c0201882:lisp/magit-diff.el f6abc48858d08769f94596b195dd4bdb32011ed8:lisp/magit-diff.el + 516 -3 57 | 613834919f499d54c48157b185d91df20b0da55c:magit.el 2d70b0868274f2644d64902b5054867241b70105:magit.el + 1719 0 58 | fe4729c77a69bca1a16aeb11656b975e41df2e25:magit.el 1d6fddb010c09b98d38bc094dc54b1cd06809912:magit.el + 5941 -1 59 | 0494b5236ae84b47cb1932bbc7133d2ac8243513:rebase-mode.el e5b3faceda4eda7bd32f1fe29e598a64c3432bc0:rebase-mode.el + 194 -2 60 | 2ed401fa872fa6fb5a28a3dc71f3c823498548a3:magit.el 9d5fd7d9a66b3ddbe8e3fcae455bb86ae7d2f863:magit.el + 7154 -1 61 | 9eddd3361362b9826e0acb5c513e5a2728eac532:lisp/magit-diff.el 341aa05b2d562b26b5043dc1b2b04b943aad0399:lisp/magit-diff.el - 720 -1 62 | 4d59336c185611d103421dc6025b6a4455902d0d:lisp/magit-sequence.el 3108805552de45f613e913647c6a2dc380faea3a:lisp/magit-sequence.el - 390 -1 63 | bd47e15c75b53dc978116e5b863510f180b9b39d:magit-compat.el 315632087f9523818e694c8fc1d93f40cf8d5eb0:magit-compat.el + 96 -1 64 | 1c51463f237e51d618a4d611f2e0a4114e0d6217:magit.el eb246415e71c926bb0fd981c20e721129e0ce150:magit.el - 1069 -1 65 | c6b88c21ea1ae1380f37e20065a5daa160f845b7:magit.el 1ffde9cfe4bf1f56cc5c909381bc83f7eaea5393:magit.el + 5354 -1 66 | f64ed3f18eb3ad1ece9bbd1a34f3c4db08be91de:lisp/magit.el 5f58266f30426a21abefe9e2eb6a3875110dff1a:lisp/magit.el + 1378 -1 67 | 33684cc36a9339f5d8c870d0afc219a86e53aa70:magit.el 0dbf576008de0ad8dd86bbc3deae02842240684f:magit.el - 2801 -2 68 | 0796f06cd1ec72f9785a00e6b26372e45ca14cdb:lisp/magit-remote.el 8290fabbfc4dc6482dc4b4a860a8f57995921324:lisp/magit-remote.el + 518 -1 69 | 1d6fddb010c09b98d38bc094dc54b1cd06809912:magit.el 3b2da271588133b93b457533fc2e86d0a27effb0:magit.el + 5929 -1 70 | 5c1a407c93ea85eb3b495a44910c2e08eeb959c7:lisp/magit.el cbb8c94aa8075770e3a56020688b6abc3d03f25b:lisp/magit.el - 1122 -1 71 | b9d9ba52e1ad3028a81d64273cfcf221dcc5f0fe:magit-log.el e0979bb6bd22a9ce5009a7cdf458034e52817da3:magit-log.el + 331 -1 72 | 633171809f303d22e4304101f39a26109b3af973:magit.el 797b25bf85d4835668dd7f7ab9a5993d83a3e0f1:magit.el - 872 0 73 | 5f1dddbec02ba307e975a998aa7d5384f671122b:git-commit-mode.el edf8e6c35f56bd61611d0abff99bda27ccd02abd:git-commit-mode.el - 555 -1 74 | 13a7ec0e6e201d21e5dbbb5849c921f5bafbc835:magit-stgit.el e8b923e3db4829fb266fd1232ce9285e9c9753c0:magit-stgit.el + 244 -1 75 | 3f5d0c56d024c6730c508e7f9fd612d234e8e749:git-rebase.el 4cd59ebe9299292413c8c3dd64afe10b92ca96ef:git-rebase.el + 48 0 76 | 7175af9abb602c8925633b750cf63f0e47ecebed:lisp/magit-remote.el 632faf3fdb6d9193508fbdc553762062a7565e7c:lisp/magit-remote.el - 329 -1 77 | 53a276e6b9be52b5ab4208d65e88d7cf790c74f4:lisp/magit-ediff.el b8964deab1bd042d74890b3e4cc5611dd3c20a25:lisp/magit-ediff.el + 351 -1 78 | 5f58266f30426a21abefe9e2eb6a3875110dff1a:lisp/magit.el c93f9c87415c038b667498747e588a1cc4203cd2:lisp/magit.el + 1405 -1 79 | 706f9f45a875052c79e101d2eebd574581653740:Documentation/magit.texi 7c72d2a9d81214761fda666dff5bcdffa1699ffe:Documentation/magit.texi + 6222 -1 80 | f454e9e7e0776edaa1fcbbc90ee17261422becd3:magit.el 301b6f41f896717b65718c22dc8a350cabf1e96c:magit.el + 5249 -1 81 | cb49072477272c751a4b3d2e8a75947921c07433:magit.el 67288d178b7adfc2dad61aad546d7af2c818f4c4:magit.el + 1954 0 82 | b7e03de7f54173951ab8b5005cba383dc466fef0:lisp/magit-remote.el 3c9bf2d30dd1d74a62f5f5844770484d488b1f79:lisp/magit-remote.el + 225 -1 83 | fd79f2393089818eac3f222bcd06bcbba259582b:magit.el 2ed401fa872fa6fb5a28a3dc71f3c823498548a3:magit.el + 7136 -1 84 | 7014febb4fb07ffce58b80bb2b99f5d8b66239ef:magit.el a8dbfafc271a2a998e27192714686fe61139d001:magit.el - 5301 -1 85 | 8324592c8aa721d8d54c158d88dd02118fd53632:lisp/magit-remote.el 7a3bb7f22f281092f3e01dbeb25ea6dd96480535:lisp/magit-remote.el + 225 -1 86 | c696d3de42ccd3146d1afed659ca2676cd4c3662:magit-log.el aa6c9c30b3cf79334e699c435331c079bdde3943:magit-log.el + 353 -1 87 | 32fc46a7240d95dfc8ff1d89076d5bf1bfc964f4:magit.el da7e16a8500f357716c19ca742bbc4afea4cc560:magit.el - 1224 -1 88 | 4a1da9f8278207ba675ee78a2a6315527c8e0ec5:lisp/magit.el 98a7a2d820406b55241b3712336be8ac3cad8575:lisp/magit.el + 1208 -1 89 | -------------------------------------------------------------------------------- /corpus/couchdb-human.sliders: -------------------------------------------------------------------------------- 1 | 0782a44ce6f54aa553e014acfa3bb11448c0682e:src/fauxton/test/mocha/chai.js 4e60f0b7a7b26662dde0ebc0a73c70df54e0f309:src/fauxton/test/mocha/chai.js + 316 0 2 | 0782a44ce6f54aa553e014acfa3bb11448c0682e:src/fauxton/test/mocha/chai.js 4e60f0b7a7b26662dde0ebc0a73c70df54e0f309:src/fauxton/test/mocha/chai.js - 3162 0 3 | 0782a44ce6f54aa553e014acfa3bb11448c0682e:src/fauxton/test/mocha/chai.js 4e60f0b7a7b26662dde0ebc0a73c70df54e0f309:src/fauxton/test/mocha/chai.js + 4495 0 4 | 4b5841afd9e626b0e04544e3295c8d8dc9ad5500:src/fauxton/app/addons/compaction/templates/layout.html 308b9937de3a1a46705e2be3ea31828722b1db1b:src/fauxton/app/addons/compaction/templates/layout.html - 24 -2 5 | ec2452b3c6602a0544809919b73b4c8197efca1d:NOTICE ee769ae0cb0c2ead88811053265e7051d6df638e:NOTICE + 185 0 6 | 67de5f5959122abdaddabc3795c9ce585081a115:NOTICE ec2452b3c6602a0544809919b73b4c8197efca1d:NOTICE + 169 0 7 | 02b144400e1fd1fe7d3ed7a828fc91776a9fd9af:share/doc/src/config/couch-httpd-auth.rst da78a932edf9af1ee1a8dda6d54dd190c49c95af:share/doc/src/config/auth.rst + 256 0 8 | f115266336753a7cead3db907a89e95031fb04d3:share/doc/src/config/couch-httpd-auth.rst 310ae02d60908fd174119d96bee7e93ed58b159a:share/doc/src/config/couch-httpd-auth.rst + 132 0 9 | 365f7b95007689106dfe7b073e2a4f844c85f75f:src/fauxton/assets/js/libs/bootstrap.js 7d3761964cf082a0dd59940d70a7fd1b2b3102d8:src/fauxton/assets/js/libs/bootstrap.js - 1920 0 10 | 365f7b95007689106dfe7b073e2a4f844c85f75f:src/fauxton/assets/js/libs/lodash.js 7d3761964cf082a0dd59940d70a7fd1b2b3102d8:src/fauxton/assets/js/libs/lodash.js + 299 -1 11 | 365f7b95007689106dfe7b073e2a4f844c85f75f:src/fauxton/assets/js/libs/lodash.js 7d3761964cf082a0dd59940d70a7fd1b2b3102d8:src/fauxton/assets/js/libs/lodash.js - 199 -1 12 | 365f7b95007689106dfe7b073e2a4f844c85f75f:src/fauxton/assets/js/libs/lodash.js 7d3761964cf082a0dd59940d70a7fd1b2b3102d8:src/fauxton/assets/js/libs/lodash.js - 276 -1 13 | 365f7b95007689106dfe7b073e2a4f844c85f75f:src/fauxton/assets/js/libs/lodash.js 7d3761964cf082a0dd59940d70a7fd1b2b3102d8:src/fauxton/assets/js/libs/lodash.js + 3205 -1 14 | b4480facc3d7bc72223c25e8b05c0fa00c08dd3f:share/www/script/test/users_db_security.js 6ce887fadc04cd06d7c09291df17799d63429b17:share/www/script/test/users_db_security.js + 272 -1 15 | 9143ce1992575854c3178ec3d3b0e8d96aec7cb5:src/fauxton/assets/js/libs/nv.d3.js 1c8864d7ddfc758468c6ef8b38f54e8664d6aad5:src/fauxton/assets/js/libs/nv.d3.js + 4753 -1 16 | 03d1b7e0c8c438d0a604c691575f9c7c15757004:src/fauxton/assets/js/libs/require.js 9b64526db9e22de0c94fd6065186336ad423f4c0:src/fauxton/assets/js/libs/require.js - 1573 -1 17 | 03d1b7e0c8c438d0a604c691575f9c7c15757004:src/fauxton/assets/js/libs/require.js 9b64526db9e22de0c94fd6065186336ad423f4c0:src/fauxton/assets/js/libs/require.js + 1734 -1 18 | eb364ff3a2a85bdc15aaa4f5b8c69aa987aea6f8:src/fauxton/app/modules/documents/resources.js 90e4da6ce6bda6cb72b325d2702fe9832e20ff59:src/fauxton/app/modules/documents/resources.js + 301 0 19 | ae6f1ebd8d0c63384050eb8c83b401a01095ad2c:src/mochiweb/mochiweb_http.erl cbb8a55082a19897e8d1350db5351bf41689185d:src/mochiweb/mochiweb_http.erl - 279 -1 20 | 61ac6f86710192debc50c0cc2275d5ef94a6c658:src/fauxton/app/templates/documents/all_docs_list.html 4e038d789b54243aa5b05a819af09c385f5a1806:src/fauxton/app/templates/documents/all_docs_list.html + 89 -1 21 | 7f88a2afedb27555b7e92aae1be2d4163bca0393:src/fauxton/app/modules/pouchdb/pouch.collate.js 04018d243540ae71b703191e5125818506cf2dd0:src/fauxton/app/modules/pouchdb/pouch.collate.js + 2 -1 22 | 3ea44df9dea153d14d424cb5de0e9e3504e17cb9:src/ddoc_cache.erl c9da4925a8a2e6a064f59ba20d223080f715032e:src/ddoc_cache.erl + 43 0 23 | a4eb1b35f6d32390f17fde518dbfc3a4d97562f0:src/ibrowse/ibrowse_test.erl fd4b78671c4367f4f6469156e428176648c07a76:src/ibrowse/ibrowse_test.erl + 446 -1 24 | 56f969b3c49375c5321eb3cceb0fe346f8535c22:src/couchdb/couch_httpd.erl b90e40212663474e873fde6cab343c31c1e635e7:src/couchdb/couch_httpd.erl + 332 -2 25 | d358892cc60c3f6b6d5bba8bdbb131d5304dea47:src/mem3_sync_security.erl 32578e40de6892a9df0b4a078000e444777344ac:src/mem3_sync_security.erl + 102 0 26 | bdc0385aba7a0b88046c84d30608fccb420ebd36:share/www/script/test/replicator_db.js 7fbf213940cd880329578ad322961c7e8d273f91:share/www/script/test/replicator_db.js + 582 -1 27 | bdc0385aba7a0b88046c84d30608fccb420ebd36:share/www/script/test/replicator_db.js 7fbf213940cd880329578ad322961c7e8d273f91:share/www/script/test/replicator_db.js + 1445 -1 28 | bdc0385aba7a0b88046c84d30608fccb420ebd36:share/www/script/test/users_db_security.js 7fbf213940cd880329578ad322961c7e8d273f91:share/www/script/test/users_db_security.js + 101 -1 29 | 7e1f18cb6a583ced7d12b6b73df88fc8c467edd5:src/fabric.erl 55b8d9990cb0173a051898439120a1e1a6f2cddc:src/fabric.erl + 133 -1 30 | bcd5039afa00952635c44a9c7e0406032366755d:src/couchdb/priv/couch_ejson_compare/couch_ejson_compare.c fcd7f804a7cf903aebaebd2793cada278ae59995:src/couchdb/priv/couch_ejson_compare/couch_ejson_compare.c - 240 -1 31 | 5408c68b74c3101c88c1419fa89ac8d3af088764:share/www/script/jquery.couch.js 3f2537fc71833752df6f4cb602c28c59e573e9ab:share/www/script/jquery.couch.js - 193 -1 32 | c2f550e16673a460a57375aa2c53dfe252820cc0:share/www/script/jquery.js 4eb0166f2f2df2dee67a498b208c5639a6feb639:share/www/script/jquery.js + 4948 -1 33 | e95ea65152db69489881af01773d254500ad0eb7:share/www/script/test/rewrite.js 49cf5e195fb33b7f887b528d6fde388db8279f78:share/www/script/test/rewrite.js + 117 -1 34 | e95ea65152db69489881af01773d254500ad0eb7:share/www/script/test/rewrite.js 49cf5e195fb33b7f887b528d6fde388db8279f78:share/www/script/test/rewrite.js + 171 -1 35 | 2e99f965af6f0010973c528ff5f60bb7312ca2d1:share/www/script/test/rewrite.js e95ea65152db69489881af01773d254500ad0eb7:share/www/script/test/rewrite.js - 117 -1 36 | 086c3564ab3889c1d4a054082a4ba4b66f5b4768:share/www/script/test/rewrite.js cf870afef4715914f353c316f22ae212b80888dd:share/www/script/test/rewrite.js - 94 -1 37 | bc7b57dbe7c1c5b61b4f00162fd206d22879f8f6:src/couchdb/priv/couch_js/main.c df7ac1368da214ef114d7716421d6e03011af947:src/couchdb/priv/couch_js/main.c + 275 -1 38 | dcde7c3c10c4a36611daefc7eef020b886c98961:test/etap/060-kt-merging.t f9e1dc5bf2fceed0d51ce9963025c2d200907c1d:test/etap/060-kt-merging.t - 57 -1 39 | 3bb11961f4fbe545e05caf0a8a75bb4ff1e04cbc:test/etap/060-kt-merging.t a19ad631cf09d818f473587bcebb92a7229c2418:test/etap/060-kt-merging.t - 92 -1 40 | 3bb11961f4fbe545e05caf0a8a75bb4ff1e04cbc:test/etap/060-kt-merging.t a19ad631cf09d818f473587bcebb92a7229c2418:test/etap/060-kt-merging.t - 104 -1 41 | 1f7e7cb5c22302788e232ce455fd0505f6420201:share/www/script/test/view_multi_key_design.js 9e53f467f89bc3942f8795f6d07f61d3f5115f88:share/www/script/test/view_multi_key_design.js + 200 -1 42 | 7d478cf34867e4c5475f907acdd9d4ef283c3db4:share/www/script/test/rewrite.js c1b74df08076cd850617e500163fdb5fc8d55f3a:share/www/script/test/rewrite.js + 94 -1 43 | 544bf49c09760e46507f71979f910f1ae81e2935:share/www/script/test/rewrite.js 9b3c2688feba69fe178b4d1e9ecff5c1a36c9475:share/www/script/test/rewrite.js + 101 -1 44 | 77962e9b1458e97aa8a534fe18f2eda1965cc8b1:share/www/script/test/rewrite.js 635b493da67ef88af21174a4110b4d53aa4a813f:share/www/script/test/rewrite.js + 87 -1 45 | 41680a4491aa018660a990997925b7a9ad3c82e4:share/www/script/test/rewrite.js 8fdcf154634d3b0efedd64049df8f4006a1415cc:share/www/script/test/rewrite.js + 135 -1 46 | 17632461e3ea7007594783c39a25055fa0ccdffe:src/couchdb/couch_httpd_show.erl 88c27f28fa212b1bb7e9fbd3da4fd70e34965cf3:src/couchdb/couch_httpd_show.erl + 43 -1 47 | 2df3fabfdc2039504295219c88e0d160f76c1afb:src/couchdb/Makefile.am ad18ea644ee7650425320736b10a48a8cbd0d340:src/couchdb/Makefile.am + 202 -3 48 | 2f18f60fea5a1de6a221c6124038399c47d42aa2:share/www/script/test/list_views.js 9ccb235a2d58d6b7caf406952f18ca13d9889f3e:share/www/script/test/list_views.js + 239 0 49 | 2f18f60fea5a1de6a221c6124038399c47d42aa2:share/www/script/test/show_documents.js 9ccb235a2d58d6b7caf406952f18ca13d9889f3e:share/www/script/test/show_documents.js + 150 -2 50 | 4aac0f7c6dcd3f3a29cfe5e1bf2bee84b9bae9d5:src/couchdb/couch_file.erl 16ccd4c0b8ae4272fa27d32948658b1424a291fc:src/couchdb/couch_file.erl - 55 -1 51 | 194975152f9c7d3d6f0c35c44a25415bc0fbafb6:share/www/script/test/view_errors.js 5442bdb4f36f6079c5e63b5ddd8486acd032e5ad:share/www/script/test/view_errors.js + 84 -1 52 | c91f851dc421466402721eb7baa644860f874ce1:share/www/script/couch_tests.js 146bc594aef47b675670e7a7fd7f89b7c6a10843:share/www/script/couch_tests.js + 2428 0 53 | 496e3b2e876b74b3da3007268271c3c667e8fbee:src/mochiweb/mochiweb.erl 65e850a01858509e0bc519832686aa52d58809b0:src/mochiweb/mochiweb.erl + 80 -4 54 | 449ad331057100adc830016d08dac081077b3df2:etc/couchdb/local_dev.ini e27fb8eaa628128f0ec8f1797805e92ec39ec6cb:etc/couchdb/local_dev.ini + 23 -2 55 | 5018945adf233336e6777e3dd085e565ffc4cccb:etc/couchdb/local_dev.ini 6cc0a3fcaddb3094f8f0fcd5bd51b3e74e70d11c:etc/couchdb/local_dev.ini + 57 0 -2 56 | ae3a9d4a0f06ef9eb6fcb0ce44e719bfc5bebbbd:etc/couchdb/local_dev.ini 56a3ee28e006aa42150482e1c3f91dc1906273f9:etc/couchdb/local_dev.ini + 51 0 -2 -5 57 | d32d8acff4bac6f51b87ddef7091c04ff7245d40:etc/couchdb/local_dev.ini aee6f18edf8cdf3f7c09c93fcf1af48c2c15fcd8:etc/couchdb/local_dev.ini + 27 -2 -5 58 | c2fd04dd8e515d45cbb552a39b218504e52e0608:test/javascript/tests/users_db_security.js b124719e84c020b996f4b5bfeb577ebda99d36f5:test/javascript/tests/users_db_security.js - 342 -2 59 | 6411a40494f0e8f59a8852c17a7d9692b2a19ad9:test/javascript/tests/cookie_auth.js 869cf544a119426d94ff0c783415467618d3a591:test/javascript/tests/cookie_auth.js + 289 0 60 | d8bd7ee0d22c403c314d18021e8bd2da8fdf2015:src/fauxton/app/addons/fauxton/tests/filterViewSpec.js 2abdb2cca937ca4551edb92bba8066672033042f:src/fauxton/app/addons/fauxton/tests/filterViewSpec.js + 80 0 61 | c84a71cb9b3d8fd20fe7b8df0a320152e035d6e2:src/fauxton/settings.json.default 27cc89cb7c306f72c2746b5ea3736bd94f17cebf:src/fauxton/settings.json.default + 49 0 62 | 0fb5aa9e67bd291ca2638dba961f4ddd3f6ccb3e:src/fauxton/assets/js/libs/nv.d3.js 95d6d6b035242d9a203b2df3af342274b29f98b1:src/fauxton/assets/js/libs/nv.d3.js + 13715 0 63 | 5f99ec2c793816a921f8795cde1c729f32e9dcdf:src/fauxton/assets/less/fauxton.less f71431192c09c773d69e2cf551490a932267711c:src/fauxton/assets/less/fauxton.less - 593 0 64 | cab37a1e117fb9c7c05858bad7cd45049e091145:src/fauxton/app/templates/fauxton/nav_bar.html 1490f18a49937fab1c9e0bfb38f1b6a74124a2be:src/fauxton/app/templates/fauxton/nav_bar.html + 42 0 65 | eed363ce7b675876684d6011db627d3845dee75d:src/fauxton/assets/less/fauxton.less acecae56f3e8442e067a3f0c1847d95ecd92e876:src/fauxton/assets/less/fauxton.less + 680 0 66 | b4480facc3d7bc72223c25e8b05c0fa00c08dd3f:share/www/script/test/users_db_security.js 6ce887fadc04cd06d7c09291df17799d63429b17:share/www/script/test/users_db_security.js + 313 0 67 | a4eb1b35f6d32390f17fde518dbfc3a4d97562f0:src/ibrowse/ibrowse_lib.erl fd4b78671c4367f4f6469156e428176648c07a76:src/ibrowse/ibrowse_lib.erl + 402 0 68 | 1074767a6b2a254fc6abcb08ec8ccc156e5aa6e9:share/www/script/test/view_pagination.js aae8762c1560a110f11fa8f2524018f20504e40d:share/www/script/test/view_pagination.js + 39 -3 0 69 | 4c6355483d3e97971a97a9a3935263ecf47f7ca8:src/couchdb/couch_view_group.erl 3a5ef653409c167cbcc6ec352e3a32467420fd56:src/couchdb/couch_view_group.erl + 98 0 70 | cec0ef2ac1d2ecb5e2153f2415cb947fadeb42e0:share/www/script/test/rewrite.js 1294f5df57c956b93232aa1635f6574c055825f8:share/www/script/test/rewrite.js + 140 0 71 | 22c551bb103072826c0299265670d1483c753dde:test/view_server/query_server_spec.rb ea3b1153e52ac1513da4d634eedefb05c261039c:test/view_server/query_server_spec.rb + 449 0 72 | 779b8a8d2f9204546db0cc41cc36830504b50c0a:etc/launchd/org.apache.couchdb.plist.tpl.in d371de8641a9482f138fbcd4bbb3ead7d85abeba:etc/launchd/org.apache.couchdb.plist.tpl.in - 29 0 73 | ea95901fe52df11338134bd86f9bc8f028c5444b:test/query_server_spec.rb 36bbc72b6b0992639a0ba7a2077d75ec9f7cf03d:test/query_server_spec.rb + 251 0 74 | a05287f49dc20ef83f89668f1d2603174823565e:share/www/script/test/list_views.js 2cf4fec22fa7214b11363eb7430c411e0afa6221:share/www/script/test/list_views.js + 163 0 75 | 2de233d67c05b32b1de6f2af18fefc56d8aad704:src/ibrowse/ibrowse.erl a2ab68be599153add0fb8b3049f71afbae1a89a1:src/ibrowse/ibrowse.erl - 667 -3 76 | 958c8a6c8c0aa03d854a1aef4ad06e0ae6583375:share/www/script/test/changes.js ce663765f3f774d07c58579dff8b5398fdfbb6ce:share/www/script/test/changes.js + 33 -2 0 77 | 9885c09375a374d6cceb95f59b3fef26b6177ad3:share/www/script/test/replication.js 899fedf56790c3c4c213d02ce698e796dbbb6b43:share/www/script/test/replication.js + 153 0 78 | 9885c09375a374d6cceb95f59b3fef26b6177ad3:share/www/script/test/replication.js 899fedf56790c3c4c213d02ce698e796dbbb6b43:share/www/script/test/replication.js + 171 0 79 | -------------------------------------------------------------------------------- /corpus/gitflow-human.sliders: -------------------------------------------------------------------------------- 1 | 5e8cc9fceb509848dee2cd62e98aadc29ffa146b:Changes.mdown 083a588d4fba8ea4a5a0f6b529cb47c9f0be47e0:Changes.mdown + 13 0 2 | 17a8112b917d7df7d8e2793e8d00184d3ed28f95:git-flow 58995b5b860bc84b7d726c0e5b2007a02a7c33ae:git-flow + 166 0 3 | 1b471a66b43ee95067b53937c62dc42d4bc561e6:git-flow-init d2eccaa7d759c06ff82a7f6ccfb67a94610a0e09:git-flow-init + 105 0 4 | 309e74f9889feab3f8276e144d226cc0f9de0791:README.mdown 1fd5bcfee6f4bc8456ac6fe3a128cce2b095b952:README.mdown + 49 0 5 | 186d2b5f81a30ae008f4b3580662bd9b7212906b:git-flow-support 170dc747e2b81024315785b4dd573c7832907860:git-flow-support + 33 0 6 | a0fe939a6cefd95391a7361f51d3725853d3e3b1:git-flow-feature 2e1856b7fd142fc13313bead37e15b563ea5951a:git-flow-feature + 93 -4 0 7 | 9277024410e8f83c22d7d1fa79678b7a4797da43:README.mdown 010252a8a96994689120732e375c83762c4c17d1:README.mdown + 69 0 8 | a0fe939a6cefd95391a7361f51d3725853d3e3b1:git-flow-feature 2e1856b7fd142fc13313bead37e15b563ea5951a:git-flow-feature + 58 0 9 | 192ff525ea3be850684338af176d0bbd3354c4e0:README.mdown 5d1dbe74052c8f1baaf5585915b369aa000611f7:README.mdown + 43 0 10 | 6107f88833612d311ae0e249750483e5b6f31458:README.mdown c02c12dd760be6b405bcbcb45e0f71450d9a7d9e:README.mdown + 52 0 11 | c213052c9ff8f2fb61ae95bd7ac1016ac937511d:README.mdown 11965b3259748a204b9cbcff3cf1256b78d700c5:README.mdown + 61 0 12 | 59e6aefa1088b21d239e3a4c8f25946bc466f11a:Changes.mdown 8b73fed62f749d5d817132c43d5d2a9a4103b753:Changes.mdown + 10 0 13 | ca73caf8c5d8d2eab325ede3e1bd17fa127db91d:git-flow-release 1a2868b8b440428a5913324480946b640e8e18cb:git-flow-release + 162 0 14 | 62345d54f3bed5bbdd26ec9d2d5275a450c533f8:git-flow-feature f6f152fff842e68f724437314dbe40778acfb949:git-flow-feature + 147 0 15 | fb238a2438f31202bd4ff96ab35b9b07e203da61:git-flow-release b866b01ba43c484e89ab36ec5fa127d053940249:git-flow-release + 56 0 16 | 766159d3039bd4f693c15bbb57c7d748e88b6c2c:gitflow-common 62c339eba9441dc519f83daa2ce96c243ae89730:gitflow-common + 100 0 17 | ab7fda21f1009d8cc073fc9ae6152731f6bfee8a:git-flow-hotfix 37f7d14b2f566390c824be6168ec730d11bb531e:git-flow-hotfix + 220 0 18 | fb238a2438f31202bd4ff96ab35b9b07e203da61:git-flow-hotfix b866b01ba43c484e89ab36ec5fa127d053940249:git-flow-hotfix + 54 0 19 | 3911e161d9ea9038a64b06924a399e0ee512dc96:git-flow-hotfix 186d2b5f81a30ae008f4b3580662bd9b7212906b:git-flow-hotfix + 43 0 20 | fb238a2438f31202bd4ff96ab35b9b07e203da61:git-flow-version b866b01ba43c484e89ab36ec5fa127d053940249:git-flow-version - 24 0 21 | ddb350b3f26192a4adc3487312915803fd19e8ff:git-flow-feature f68d405cc3a11e9df3671f567658a6ab6ed8e0a1:git-flow-feature + 146 0 22 | c3948cf8bdcc9744d5d4a801d4cb9a8dff42c2fb:Makefile c3b7db9d2a8d06d681c05d7cabc4e7de55de63f8:Makefile + 3 0 23 | 679f05f4fb52f870b2186eb6f74f7246868f4613:git-flow f60828188567304a920197bae17d3246c8359ed2:git-flow + 40 0 24 | fb238a2438f31202bd4ff96ab35b9b07e203da61:git-flow-version b866b01ba43c484e89ab36ec5fa127d053940249:git-flow-version + 20 0 25 | fe1d4c9f70efd631f3e9d8e6e4733051a76bf186:README.mdown 553776fd08c288fa221817ce118939c358d08ecb:README.mdown + 8 0 26 | 4e5c3e991532b04dd3bf205cfe330b95f56df17d:git-flow-feature bd4f095186951394209b3e0ef9a1fb4f24bf77bb:git-flow-feature + 159 0 27 | fb238a2438f31202bd4ff96ab35b9b07e203da61:git-flow-support b866b01ba43c484e89ab36ec5fa127d053940249:git-flow-support + 42 0 28 | 7672d99d3413951a9647ca80e991cc28f7ec28e5:git-flow-hotfix 49dd62b7156114bf3b7caede241e944dbfd34c67:git-flow-hotfix + 15 0 29 | 21c3483326dd236da811617241b18ae0f28295bb:gitflow e4736ce59f5b38b50570b8ef4efe82ace9a551ea:gitflow - 34 0 30 | 0c92777046715dcf84739d2377bfefab6fea6a11:README.mdown f8b34b237995b0b3d8d33b25fc6429720d617b9a:README.mdown + 73 0 31 | 61ade55fcb2a3aea7935fe2ea3ef512016b502e3:gitflow-hotfix f7f687ce529e028857fa98872a4eee594a2e9051:gitflow-hotfix + 8 0 32 | ddd9dfe9880dd8e25150c0016d878022ad35631a:git-flow-release 46f9998f37d8726f6499d336adb2b41770fe37d1:git-flow-release - 152 0 33 | fb238a2438f31202bd4ff96ab35b9b07e203da61:git-flow-init b866b01ba43c484e89ab36ec5fa127d053940249:git-flow-init - 19 0 34 | 677334c60a23281e540c77a125ffb7426980ab2e:gitflow-common 7832d6efb9985cb768e28a0884027dceeae21e59:gitflow-common - 68 0 35 | 7832d6efb9985cb768e28a0884027dceeae21e59:gitflow-common 55c15539fa56d21ee7eb99c7b8303ee29ec8a3b4:gitflow-common - 160 0 36 | 9277024410e8f83c22d7d1fa79678b7a4797da43:git-flow-hotfix 010252a8a96994689120732e375c83762c4c17d1:git-flow-hotfix + 102 0 37 | 3911e161d9ea9038a64b06924a399e0ee512dc96:git-flow-feature 186d2b5f81a30ae008f4b3580662bd9b7212906b:git-flow-feature + 49 0 38 | 58995b5b860bc84b7d726c0e5b2007a02a7c33ae:git-flow-feature 49c7d029ec90d9ebf1c512bf9faccbd03712743f:git-flow-feature + 108 0 39 | 9cf5673475871707dbeb986d29531e94ed655849:git-flow-feature 95bf82c2ab7e6f0c432ea01094b482a66548ef07:git-flow-feature + 252 0 40 | 5b05ad78d10f8cb596fce1eb8ecf76a232962ace:git-flow-feature a2baef958773cf3d5342fac63c09ee3513f05468:git-flow-feature + 404 0 41 | d72e4aceed207a90dbc7215c1738120bb844e21c:gitflow-common 49094bd9c63813691ae8e41d922cf550cb87452d:gitflow-common + 136 0 42 | 9277024410e8f83c22d7d1fa79678b7a4797da43:git-flow-release 010252a8a96994689120732e375c83762c4c17d1:git-flow-release + 108 0 43 | ca73caf8c5d8d2eab325ede3e1bd17fa127db91d:git-flow-hotfix 1a2868b8b440428a5913324480946b640e8e18cb:git-flow-hotfix + 156 0 44 | 21c7aa9c8b3a5fb765a2ab299b0a8d660ec270a2:gitflow-common d72e4aceed207a90dbc7215c1738120bb844e21c:gitflow-common + 47 0 45 | 4c92a9d339d62cedc158b3f0e5723a9fbe072603:git-flow-feature c62633fbe477a242669659d9042c2bd24c16c4a1:git-flow-feature + 353 0 46 | 4c90d928ee72f0b2ba491d67ea79f80dab40f8f4:git-flow-release 92c16a9eadcb6039b370760f711409c9473cc41b:git-flow-release + 152 0 47 | 62c339eba9441dc519f83daa2ce96c243ae89730:Changes.mdown 0d00b698f2567737137fcac464d146a78ee7af0c:Changes.mdown + 5 0 48 | 677334c60a23281e540c77a125ffb7426980ab2e:gitflow-common 7832d6efb9985cb768e28a0884027dceeae21e59:gitflow-common + 45 0 49 | bd4a1f121fde7247689ec907131240b9f2df3db6:README.mdown 12c4ab4fb4f0acd6a8ecf4c40ad5619aaff6a00f:README.mdown + 53 0 50 | e5eaff9557e935a870bbcc9551a7c38d4c4d54f5:git-flow 4ea07a2cc52d5e458a34bb7cfa1df5b25d70ea6c:git-flow - 68 0 51 | 07dacd5212c98c2e12f583a2acfb365eeb784f8b:README.mdown 5a586336158de625ed9bc9541465b5643f9805d5:README.mdown + 93 0 52 | cf5b2a5562767ac80ce1e9e103c5e460dd0dabce:Changes.mdown 59e6aefa1088b21d239e3a4c8f25946bc466f11a:Changes.mdown + 5 0 53 | ea58d0f1de6455560a85d81e588e8b1151f8aaef:git-flow-feature 1b8192362e2dfcb92cec4e8f2b3ce0469bf875e2:git-flow-feature - 105 0 54 | f2536f4c6806df6079b4256e9a1f9b57b248b2f7:git-flow-feature 1adbc3e9cac5f36880cf53cb850fb74c78ea8a8b:git-flow-feature + 43 0 55 | a93a53588c307877dd4ff5a1da97a9506735c5a4:git-flow 427c5dbab572b77f0b0d5f9c8942123746923805:git-flow + 89 0 56 | 13c94821e7864a9a5c3da4acbeade50bc4d2cc3d:git-flow-release 6d64d2c34016bc6747b5f3efa71f8b5548a48d1a:git-flow-release + 121 0 57 | 42600d9b43e0e3da888f6f71718dc1d190211c21:git-flow ea58d0f1de6455560a85d81e588e8b1151f8aaef:git-flow + 56 0 58 | ca8be5275ff6fd3e5f8012f31054c34d25ff0d9a:gitflow-common f50df990af7a8cc70a8b42cd539538728c067df7:gitflow-common + 47 0 59 | 4ea07a2cc52d5e458a34bb7cfa1df5b25d70ea6c:git-flow 4a864fbc090c482c7c17fc304745867b2f89254b:git-flow - 39 0 60 | 5474e46a7373368e048c397586b4403cc9562d71:git-flow c3607ac2e8cbff05730143da3a968476a09810f5:git-flow - 102 0 61 | 03f27baa4dfaf14f8d5e9a71e820909bb4d5311b:git-flow-release fbcf4a0e648ec868345f72bebf745a2844a786bd:git-flow-release + 279 0 62 | ddb350b3f26192a4adc3487312915803fd19e8ff:git-flow-feature f68d405cc3a11e9df3671f567658a6ab6ed8e0a1:git-flow-feature + 448 0 63 | 7672d99d3413951a9647ca80e991cc28f7ec28e5:git-flow-feature 49dd62b7156114bf3b7caede241e944dbfd34c67:git-flow-feature + 15 0 64 | d76add9ee2ea68a4649d0df9615f3ef7ec2c6bba:README.mdown ec0b854b3e37e586b61f19782f38d6babcc9c230:README.mdown + 34 0 65 | fb238a2438f31202bd4ff96ab35b9b07e203da61:git-flow-feature b866b01ba43c484e89ab36ec5fa127d053940249:git-flow-feature + 60 0 66 | c7ea9b22364262cd838c04530e5d8702082bad41:git-flow 3c337fb5e40cc035f6fe6b09b16e54de72de3b0b:git-flow + 205 0 67 | a1bc8717e2cc2fc60105f614ab71486f50c8ea67:gitflow-sh-setup 6c9e8049a95e320726ab36a04f52190a05f2e561:gitflow-sh-setup + 53 0 68 | 3911e161d9ea9038a64b06924a399e0ee512dc96:git-flow-feature 186d2b5f81a30ae008f4b3580662bd9b7212906b:git-flow-feature - 160 0 69 | b25ab83334c14452081af61ca9162d01db40b1e9:git-flow-init 131c2988c61a929fe49d432f1bed9f67c3915bd2:git-flow-init + 19 0 70 | c1598bf2cf8e27e556240e728a9d389b4299e67c:gitflow-common ef43cbd661f3cd479151869be647a26a4397cb7e:gitflow-common + 157 0 71 | 9277024410e8f83c22d7d1fa79678b7a4797da43:git-flow-support 010252a8a96994689120732e375c83762c4c17d1:git-flow-support - 120 0 72 | 5474e46a7373368e048c397586b4403cc9562d71:git-flow c3607ac2e8cbff05730143da3a968476a09810f5:git-flow + 48 0 73 | c118a85b44011a1ab102e40650b1e87a4d7254e9:git-flow-feature d43ab849eb527912b08f6aec4a79ea69ef4ef25c:git-flow-feature + 393 0 74 | 427c5dbab572b77f0b0d5f9c8942123746923805:Makefile c7bbfcf42d5eceafced1cf4cb1f508a1a148fcd6:Makefile + 3 0 75 | 4e11dd6f218ddaf76cc353f2c8ba495c1acb32fb:gitflow-common b25ab83334c14452081af61ca9162d01db40b1e9:gitflow-common + 154 0 76 | 4c92a9d339d62cedc158b3f0e5723a9fbe072603:git-flow-feature c62633fbe477a242669659d9042c2bd24c16c4a1:git-flow-feature + 131 0 77 | 79d4b4fef300dac6d0ae5bdb3403dca10f7fc77f:README.mdown d76add9ee2ea68a4649d0df9615f3ef7ec2c6bba:README.mdown - 8 0 78 | b33ea8ac67bd5efffe7fa9e35431f4c12ae4644d:README.mdown b17b8986c8968f95b5271fd5aa55f7dc70f5099b:README.mdown + 38 0 79 | 1db658f5deb3cbdf04a7ed54424b99591ab3dfa1:git-flow 4417492346098b68310d74ec2a7774404722cada:git-flow + 205 0 80 | ee7edbe0ac7af9272420cf2b525db34eac013b35:README.mdown b9250b04b81721aeede70da9b53200a5b85300e8:README.mdown - 101 0 81 | ea738ef31dcabfb6b17a4ee776e0cede593bfd2f:README.mdown ac949bfb8120eb38657488a101b4a3dd649720ba:README.mdown + 53 0 82 | 553776fd08c288fa221817ce118939c358d08ecb:gitflow-common f1eaa4e0d05a1edc1023a1922c7cc5e2d5bcb546:gitflow-common - 47 0 83 | 023ed6983e7bc14664c9095d1e099dd974ba25b8:README.mdown b52f79e3c1352ac11c50421222af4a20b2a695f3:README.mdown - 107 0 84 | 4d8b379ad4754caa59ed411f7ea30db2d4beb91b:README.mdown ea738ef31dcabfb6b17a4ee776e0cede593bfd2f:README.mdown + 15 0 85 | 1a2868b8b440428a5913324480946b640e8e18cb:gitflow-common 5fa4758e54e6b3fd0c1dfbd76fa246dc59e674f8:gitflow-common + 151 0 86 | fe1d4c9f70efd631f3e9d8e6e4733051a76bf186:README.mdown 553776fd08c288fa221817ce118939c358d08ecb:README.mdown - 130 0 87 | d72e4aceed207a90dbc7215c1738120bb844e21c:gitflow-common 49094bd9c63813691ae8e41d922cf550cb87452d:gitflow-common - 166 0 88 | 07dacd5212c98c2e12f583a2acfb365eeb784f8b:README.mdown 5a586336158de625ed9bc9541465b5643f9805d5:README.mdown + 106 0 89 | 0f74cf4f8d8a78f16a112ef28425b75aefeaea1f:gitflow-common 1b471a66b43ee95067b53937c62dc42d4bc561e6:gitflow-common + 47 0 90 | c7ea9b22364262cd838c04530e5d8702082bad41:git-flow-support 3c337fb5e40cc035f6fe6b09b16e54de72de3b0b:git-flow-support + 19 0 91 | 605b7cd8b48c2e0e417f5b344aff8b0e491cf610:gitflow-sh-setup 00ccea60aef8174caf0dc64c2fad36a28ecd7064:git-flow - 15 0 92 | 5474e46a7373368e048c397586b4403cc9562d71:git-flow c3607ac2e8cbff05730143da3a968476a09810f5:git-flow - 28 0 93 | 186d2b5f81a30ae008f4b3580662bd9b7212906b:git-flow-release 170dc747e2b81024315785b4dd573c7832907860:git-flow-release + 44 0 94 | 21c7aa9c8b3a5fb765a2ab299b0a8d660ec270a2:gitflow-common d72e4aceed207a90dbc7215c1738120bb844e21c:gitflow-common + 119 0 95 | 7832d6efb9985cb768e28a0884027dceeae21e59:gitflow-common 55c15539fa56d21ee7eb99c7b8303ee29ec8a3b4:gitflow-common - 175 0 96 | 677334c60a23281e540c77a125ffb7426980ab2e:gitflow-common 7832d6efb9985cb768e28a0884027dceeae21e59:gitflow-common + 15 0 97 | 69f205c13bb70549e8f818b5eb6049885322fae7:git-flow-init f78b6604adc771e963fb463d8eb5b8be6aa87bb7:git-flow-init + 72 0 98 | ab3dc49b8a84fe0cf00bc5093d6856dd03eb3431:git-flow-support 2acfffd96a04182fc0912446e547ad355f136d9b:git-flow-support + 63 0 99 | 4e11dd6f218ddaf76cc353f2c8ba495c1acb32fb:gitflow-common b25ab83334c14452081af61ca9162d01db40b1e9:gitflow-common + 41 0 100 | 7672d99d3413951a9647ca80e991cc28f7ec28e5:git-flow-release 49dd62b7156114bf3b7caede241e944dbfd34c67:git-flow-release + 15 0 101 | 877f5fe8c778f8424617e8cb3f4e82fa93d3c1db:README.mdown fe1d4c9f70efd631f3e9d8e6e4733051a76bf186:README.mdown + 137 0 102 | 4ea07a2cc52d5e458a34bb7cfa1df5b25d70ea6c:git-flow 4a864fbc090c482c7c17fc304745867b2f89254b:git-flow + 21 0 103 | 47d1b9d7d07bc9fea793967831e02a618a3d7848:git-flow e1ec57d48ac5c234262d84469af56b00b38929ab:git-flow + 70 0 104 | 7d0a4096f7acb5c1b29a22f2789e0ac5c51c28de:gitflow-sh-setup 4f1cc330446627af485a054cab14003781a97f9f:gitflow-sh-setup + 15 0 105 | ca73caf8c5d8d2eab325ede3e1bd17fa127db91d:gitflow-common 1a2868b8b440428a5913324480946b640e8e18cb:gitflow-common + 145 0 106 | 00ccea60aef8174caf0dc64c2fad36a28ecd7064:git-flow e5eaff9557e935a870bbcc9551a7c38d4c4d54f5:git-flow + 16 0 107 | 53e9c7680a2892ceeb5a21c11367940eca8407a0:gitflow-common 5bca8d9358f5b08af40ac32f289bb14b18965cec:gitflow-common + 73 0 108 | 886c9e15312b1cc8adcfc34af0bc85e9b085585c:gitflow-common d099126fe5d437abc11190667bc35b3769ca2221:gitflow-common + 46 0 109 | 2e1856b7fd142fc13313bead37e15b563ea5951a:git-flow-feature 22ef21a1368de039501d88820ca925341d114d1a:git-flow-feature + 105 0 110 | c7ea9b22364262cd838c04530e5d8702082bad41:git-flow-feature 3c337fb5e40cc035f6fe6b09b16e54de72de3b0b:git-flow-feature - 31 0 111 | 7672d99d3413951a9647ca80e991cc28f7ec28e5:git-flow-support 49dd62b7156114bf3b7caede241e944dbfd34c67:git-flow-support + 15 0 112 | 13c94821e7864a9a5c3da4acbeade50bc4d2cc3d:git-flow-hotfix 6d64d2c34016bc6747b5f3efa71f8b5548a48d1a:git-flow-hotfix + 115 0 113 | a0434cad2e2212f921e4f92ce9139702acd10eb4:gitflow-sh-setup afee9fdfed77ca66e03c38122607551d676e0a33:gitflow-sh-setup + 52 0 114 | 403fdca36a93e5f6ad867a1116688e2f5b11edbe:gitflow 463dd443d83abccdebf9a78fe0d265f64b926b43:gitflow + 15 0 115 | 48386441c87c9268c2bc93084f781bfbe9a25c3f:git-flow-feature e034e4a2799fadc6df288411f806898fd4edd01f:git-flow-feature + 83 0 116 | be5dabf88e98075b9bc936bfa7de0f54a21a0482:git-flow-hotfix 0b324def488f2e73e0db6109e440974f3aab265f:git-flow-hotfix + 192 0 117 | 9ddb1dca6869739ed39fbab09f089bf52c935f36:gitflow-common 1d8bb0d11ae3b937dd2de0e4406b82d64ddbcf52:gitflow-common + 52 0 118 | 9277024410e8f83c22d7d1fa79678b7a4797da43:git-flow-support 010252a8a96994689120732e375c83762c4c17d1:git-flow-support + 105 0 119 | 7832d6efb9985cb768e28a0884027dceeae21e59:gitflow-common 55c15539fa56d21ee7eb99c7b8303ee29ec8a3b4:gitflow-common - 217 0 120 | ddb350b3f26192a4adc3487312915803fd19e8ff:git-flow-feature f68d405cc3a11e9df3671f567658a6ab6ed8e0a1:git-flow-feature + 187 0 121 | 19a6e24a11b76049feed76cbc5604a7fcb90ac14:README.mdown cb9222811959f923482c0ce4d945aa4763492cb4:README.mdown + 121 0 122 | 3176f74eb9de154d0255454d21ee5daaa44d193d:git-flow b5500d4b3abf5e6f8606e4091fde504edb2e2871:git-flow - 81 0 123 | 7832d6efb9985cb768e28a0884027dceeae21e59:gitflow-common 55c15539fa56d21ee7eb99c7b8303ee29ec8a3b4:gitflow-common - 265 0 124 | 21c7aa9c8b3a5fb765a2ab299b0a8d660ec270a2:git-flow d72e4aceed207a90dbc7215c1738120bb844e21c:git-flow - 65 0 125 | a0434cad2e2212f921e4f92ce9139702acd10eb4:test-sh-setup afee9fdfed77ca66e03c38122607551d676e0a33:test-sh-setup + 9 0 126 | 5474e46a7373368e048c397586b4403cc9562d71:git-flow c3607ac2e8cbff05730143da3a968476a09810f5:git-flow - 76 0 127 | 7832d6efb9985cb768e28a0884027dceeae21e59:gitflow-common 55c15539fa56d21ee7eb99c7b8303ee29ec8a3b4:gitflow-common + 50 0 128 | -------------------------------------------------------------------------------- /corpus/afnetworking-human.sliders: -------------------------------------------------------------------------------- 1 | 3e3d94f93828f5eeb11fc1218c3bc45399e9a66e:AFNetworking/AFRestClient.h 5cf1028433228b20e7cf30a463353981809fcd0b:AFNetworking/AFRestClient.h - 77 -2 2 | edb0830128712517df2461b8567860a9d23abfc6:AFNetworking/AFImageRequestOperation.h 5ddd070607d801f305fbfe6550e81d0b47a8881c:AFNetworking/AFImageRequestOperation.h - 71 -1 3 | 6f63157e33149226bfc2f014748cb5ef5c9a3a9b:AFNetworking/AFURLConnectionOperation.h f2ae5c40ba087957883f77c826834d9068bc0981:AFNetworking/AFURLConnectionOperation.h + 43 -1 4 | 8000151931eabb91b15621cab33a94145d8c15bd:UIKit+AFNetworking/AFImageDownloader.h c54bf4598092f69334741602f050fb57dcc181b3:UIKit+AFNetworking/AFImageDownloader.h + 78 -1 5 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 9251 -2 6 | 95442be7b30bba2dce13e2fc38af5004dd1a4de2:AFNetworking/AFHTTPClient.h c7131794207e356e6aab45640095c1f61c0ef1d7:AFNetworking/AFHTTPClient.h - 39 -1 7 | 5eaa869b9e2afe2719e60e72d353d9b57af5b946:AFNetworking/AFSecurityPolicy.h 3ec53cf42bb391b9ca4089a43a43e254a2638b45:AFNetworking/AFSecurityPolicy.h + 45 -1 8 | 7dc8ca21c5d5abd4bec9e2ad4a8f9a7bff079878:.travis.yml 913f2f9e8f8f73d5463e42ee9b8b557bc1672bb6:.travis.yml - 14 -1 9 | 29b95028460fb4c51563414c978f61ec4dd382c0:AFNetworking/AFURLRequestSerialization.h bea8162431e8cec7f797be0e8934d12a3f885111:AFNetworking/AFURLRequestSerialization.h + 162 -1 10 | d2b02c3f17933cd19e0d27ccc1278c7206de27fa:AFNetworking/AFJSONUtilities.m 553e1d7e6b7373e79d14ad71a4e67e6513d1b09a:AFNetworking/AFJSONUtilities.m + 165 0 11 | 751d7521cffb6271d3da7bdb2ed592e96c6ef8cf:AFNetworking/AFURLSessionManager.m 21d6a56ff0846986c3a66e0b076035184c6ce9e7:AFNetworking/AFURLSessionManager.m + 314 -2 0 12 | 97d4d179df40c9982df436a0cdeeec0e47a6e5e6:AFNetworking/AFJSONRequestOperation.h 561df45eb76fcc1377056cc87616adfa070f6470:AFNetworking/AFJSONRequestOperation.h - 39 -1 13 | 280c3750b0da21e958e59ffa30d3ef7ed9b176f5:Tests/Tests/AFNetworkActivityManagerTests.m aed204a5e99c73e36b645a37f0d1dbc1f7a249b4:Tests/Tests/AFNetworkActivityManagerTests.m - 86 0 14 | c94242d62f492b1935cb36b0faa7b9a7e420cc39:AFNetworking/AFURLSessionManager.h 422847539f8834e1081cd4d6f29e583769373c5d:AFNetworking/AFURLSessionManager.h - 475 -2 15 | 553e1d7e6b7373e79d14ad71a4e67e6513d1b09a:AFNetworking/AFHTTPClient.h 5b49cbbc8698c2f9ffab35417ab8375d084b6942:AFNetworking/AFHTTPClient.h + 41 -1 16 | ebe06c227d6deaaa027f51d40650dc7b111b6198:AFNetworking/AFHTTPRequestOperation.h 4f89cc650ec115e9c6c35be856f7563748ff0b96:AFNetworking/AFHTTPRequestOperation.h - 27 -1 17 | 262ebd43cc593a82b147de737326dccc42f558cf:UIKit+AFNetworking/UIAlertView+AFNetworking.m 01f6aed22a357d5498eeb107d25ffbc7da101316:UIKit+AFNetworking/UIAlertView+AFNetworking.m - 92 0 18 | 85ad5ea6a0b4ad97ca215fd02f6705880ca617e7:Example/Classes/Models/Post.h c1844f60e30654981c5d7b68512898aab0277eb1:Example/Classes/Models/Post.h + 39 0 19 | 3e3d94f93828f5eeb11fc1218c3bc45399e9a66e:AFNetworking/AFRestClient.h 5cf1028433228b20e7cf30a463353981809fcd0b:AFNetworking/AFRestClient.h - 86 -2 20 | a3f39712c73e5f9d0aad11a2159043479fe57b29:Example/MainMenu.xib ec2cee42d20368f86cb542bd33985554578205f9:Example/MainMenu.xib + 896 -2 21 | 5e90a17c767fb75a675cab7735e0ac19a6dd7ab9:AFNetworking/AFHTTPClient.m ced167f8670c788bd4599350aaf289ee483f57bd:AFNetworking/AFHTTPClient.m + 58 0 22 | e9855af89db857fc0c81473d95efc69aa3e583e5:AFNetworking/AFHTTPClient.h b8ca3496f846096ab8ded3d22aac0df716f9779f:AFNetworking/AFHTTPClient.h - 371 -1 23 | 09658b352a496875c91cc33dd52c3f47b9369945:AFNetworking/AFHTTPRequestOperationManager.h d0b4f72d83d201fb6f6218a6876e06d0b519f804:AFNetworking/AFHTTPRequestOperationManager.h + 112 -1 24 | c94242d62f492b1935cb36b0faa7b9a7e420cc39:AFNetworking/AFURLRequestSerialization.h 422847539f8834e1081cd4d6f29e583769373c5d:AFNetworking/AFURLRequestSerialization.h - 167 -1 25 | d2b02c3f17933cd19e0d27ccc1278c7206de27fa:AFNetworking/AFHTTPRequestOperation.h 5b7a2cb05f1617a9e7da2f4e5a19eeb7588e8a83:AFNetworking/AFHTTPRequestOperation.h - 53 -1 26 | caaa997aecbe1e49d0b7bc0ef7c2e125fbed0bc4:AFNetworking/AFNetworkReachabilityManager.h c093cd990a31d9b2556d4bc638fca2f708261a40:AFNetworking/AFNetworkReachabilityManager.h + 85 -1 27 | 730c35926ad926cab80d053c895f3444daa85f23:AFNetworking/AFURLConnectionOperation.h ed94ddf7b09263fcc7104e936a7ae1d751199fe7:AFNetworking/AFURLConnectionOperation.h + 33 -1 28 | e8d55c8896150fa888257f45eb397f934697b922:AFNetworking/AFHTTPClient.h 59039d6a8348c2591b1a6ecb0bfcb9b49f3036e8:AFNetworking/AFHTTPClient.h + 578 -1 29 | e08f2361467f29aecf7702a912418b38d1400d2b:AFNetworking/AFHTTPClient.h b7d06b1fb76b375f358e7fda88b0a94722f9a8e1:AFNetworking/AFHTTPClient.h + 39 -1 30 | eaa9059cd20ded46190dcda939882c02611f5333:Example/MainMenu.xib 9d399e9ffa837e75e98721dc39622e16b7a0ce96:Example/MainMenu.xib + 770 -1 31 | 856393fc6dd923f9b1bd1ec8c32ad9ff8f781faf:AFNetworking/AFURLSessionManager.h 33c9595e820aaf143764e85bd6c601295a3fbf4a:AFNetworking/AFURLSessionManager.h - 319 -1 32 | 957f18ba373ace2c2a47857d88ebfdb0b2b821c2:AFNetworking/AFURLSessionManager.h 210c260422b3d4226a141c616f14a8887b91a93f:AFNetworking/AFURLSessionManager.h - 292 -1 33 | 957f18ba373ace2c2a47857d88ebfdb0b2b821c2:AFNetworking/AFHTTPSessionManager.h 210c260422b3d4226a141c616f14a8887b91a93f:AFNetworking/AFHTTPSessionManager.h + 230 -1 34 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 1697 -2 35 | 97aa010602bae4b74794993efe4412571df32fd8:UIKit+AFNetworking/AFImageDownloader.h 43d4847e390286a971d82672fc4351915d6c5b09:UIKit+AFNetworking/AFImageDownloader.h + 125 -1 36 | 26984f4414897cb09f6b61c2b2aa55361d1fd63f:AFNetworking/AFRestClient.m 8833578a149e8011a957d08660075503f1656712:AFNetworking/AFRestClient.m - 177 0 37 | ec2cee42d20368f86cb542bd33985554578205f9:Example/MainMenu.xib b648e33481d1fcbaff8bbfcd3d696aa8a0e706eb:Example/MainMenu.xib + 2018 -1 38 | c94242d62f492b1935cb36b0faa7b9a7e420cc39:AFNetworking/AFURLRequestSerialization.h 422847539f8834e1081cd4d6f29e583769373c5d:AFNetworking/AFURLRequestSerialization.h - 231 -1 39 | c94242d62f492b1935cb36b0faa7b9a7e420cc39:AFNetworking/AFURLRequestSerialization.h 422847539f8834e1081cd4d6f29e583769373c5d:AFNetworking/AFURLRequestSerialization.h - 207 -1 40 | 910811a5e051ede26dfcae9734c263d81acb31ca:AFNetworking/AFHTTPClient.m 4717b66a49221eb716fab86b7a69b297f154e5cd:AFNetworking/AFHTTPClient.m - 58 0 41 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 3385 -2 42 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 4001 -4 43 | 262ebd43cc593a82b147de737326dccc42f558cf:AFNetworking.xcworkspace/contents.xcworkspacedata 01f6aed22a357d5498eeb107d25ffbc7da101316:AFNetworking.xcworkspace/contents.xcworkspacedata + 70 -1 44 | 85ad5ea6a0b4ad97ca215fd02f6705880ca617e7:Example/Classes/Models/User.h c1844f60e30654981c5d7b68512898aab0277eb1:Example/Classes/Models/User.h + 40 0 45 | 574792d9cbb7b0d8d330d92ae3aa97bc6072ddbc:AFNetworking/AFHTTPClient.h 53abb542915a39df2500d5e02cd8bb99d941d118:AFNetworking/AFHTTPClient.h + 555 -3 46 | 3124db42cd6434f7c110251d2acd0b4ca377b38d:AFNetworking/AFHTTPRequestOperation.h 8a93284ca46ef3df7f3853acec3285eeec0d5bb3:AFNetworking/AFHTTPRequestOperation.h - 80 -1 47 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 1847 -2 48 | ec2cee42d20368f86cb542bd33985554578205f9:Example/MainMenu.xib b648e33481d1fcbaff8bbfcd3d696aa8a0e706eb:Example/MainMenu.xib + 755 -1 49 | aed204a5e99c73e36b645a37f0d1dbc1f7a249b4:AFNetworking.xcworkspace/contents.xcworkspacedata 330ac3c4d45be253f592563a543c9fc867360e26:AFNetworking.xcworkspace/contents.xcworkspacedata + 131 -1 50 | 2c478758a2c5cf0b3d5e9ba08762ca80c5f79ef5:AFNetworking/AFHTTPClient.h c2be31d4fa9acca15f21a91ca2804e7164b33f77:AFNetworking/AFHTTPClient.h + 101 -1 51 | 29b95028460fb4c51563414c978f61ec4dd382c0:AFNetworking/AFURLRequestSerialization.m bea8162431e8cec7f797be0e8934d12a3f885111:AFNetworking/AFURLRequestSerialization.m + 260 -1 52 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 2483 -2 53 | a985871a95296596f9ba24229f4bf1715792005d:AFNetworking/AFURLRequestSerialization.h f5a97a88ffb278575eb9629b98db680f31a0a0ac:AFNetworking/AFURLRequestSerialization.h - 324 -1 54 | 9d399e9ffa837e75e98721dc39622e16b7a0ce96:Example/MainMenu.xib a3f39712c73e5f9d0aad11a2159043479fe57b29:Example/MainMenu.xib - 770 -1 55 | 01572eed3db5c31c6ac3855d3e4f2d1307889d6d:AFNetworking/AFHTTPRequestOperation.h 68eb634027c2d5af23c8f8e0a772433cbf709ea2:AFNetworking/AFHTTPRequestOperation.h + 27 -1 56 | 9cdea00b075ce6a3f635b26000d65c84c8011126:AFNetworking/AFHTTPClient.h f9c0576f89f633a85c41ae7d388aba44611802a6:AFNetworking/AFHTTPClient.h + 551 -1 57 | 856393fc6dd923f9b1bd1ec8c32ad9ff8f781faf:AFNetworking/AFURLSessionManager.h 33c9595e820aaf143764e85bd6c601295a3fbf4a:AFNetworking/AFURLSessionManager.h + 287 -1 58 | b67cfa19cac4eefdd16db40e2992d5afb9ba91d3:AFNetworking/AFURLSessionManager.h 17871c196112b871977ca3b4f594ac462404c3e4:AFNetworking/AFURLSessionManager.h + 319 -1 59 | fa8426be1547941114dddd45ff18990da0632f32:Tests/Tests/AFHTTPSerializationTests.m 8ba14ef8a03939c55c75a5e984cd16f4727feb20:Tests/Tests/AFHTTPRequestSerializationTests.m - 108 0 60 | 9db6277e62faa31d842b3dc8b94f59adb7639054:AFNetworking/AFSecurityPolicy.h 00b23107c4b169d01a226e6c2cd1b254cdb2c56f:AFNetworking/AFSecurityPolicy.h + 66 -1 61 | 37275860d78be953ba4009831edf542b7cce6476:AFNetworking/AFNetworkActivityIndicatorManager.h 6923e31db5b94052c4fcdd031ada4036ba758dcf:AFNetworking/AFNetworkActivityIndicatorManager.h + 43 -1 62 | 85ad5ea6a0b4ad97ca215fd02f6705880ca617e7:Example/Classes/Models/Post.m c1844f60e30654981c5d7b68512898aab0277eb1:Example/Classes/Models/Post.m + 66 0 63 | 1d243f779431660414e35cf7ed84faf93f77e600:AFNetworking/AFHTTPClient.h c6137914fa9012e7beb11eed54cde70a8235f0cd:AFNetworking/AFHTTPClient.h + 246 -1 64 | c94242d62f492b1935cb36b0faa7b9a7e420cc39:AFNetworking/AFURLSessionManager.h 422847539f8834e1081cd4d6f29e583769373c5d:AFNetworking/AFURLSessionManager.h - 462 -1 65 | 1748a62b8df639f262591e124ca8e4276440ef99:AFNetworking/AFNetworkActivityIndicatorManager.h e76262c2755567509900a69d97431709cad7b85e:AFNetworking/AFNetworkActivityIndicatorManager.h + 35 -1 66 | 3e3d94f93828f5eeb11fc1218c3bc45399e9a66e:AFNetworking/AFRestClient.h 5cf1028433228b20e7cf30a463353981809fcd0b:AFNetworking/AFRestClient.h - 68 -2 67 | 85ad5ea6a0b4ad97ca215fd02f6705880ca617e7:Example/Classes/Models/User.m c1844f60e30654981c5d7b68512898aab0277eb1:Example/Classes/Models/User.m + 101 0 68 | c39c43a4c1a294f8a6a5d987bfe75e33814428ad:AFNetworking/AFURLRequestSerialization.m 29808f1306a83bb400434803daae15a3026efaba:AFNetworking/AFURLRequestSerialization.m + 288 -1 69 | ca697ce3007caa1c3c4bd6d6b6358f333fb009f5:AFNetworking/AFURLConnectionOperation.h 2a1d81a79221dada4eefe8e8d0bd2090f4326181:AFNetworking/AFURLConnectionOperation.h - 43 -1 70 | fdc4bc475ecdf0a231f38e61c0dbb701c68d399c:AFNetworking/AFURLResponseSerialization.h 5369a03786a7d460987ff7ab643422b1e00a7ede:AFNetworking/AFURLResponseSerialization.h + 120 -1 71 | 206f6ff1f62dde0bf4c57b89a95cb5d790293f43:AFNetworking/AFJSONUtilities.h fb59b75493bf2e5553093225c37d8135d177e31a:AFNetworking/AFJSONUtilities.h + 129 0 72 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 10605 -4 73 | e1995eae55106a5d61c160cc1f60022555860da2:AFNetworking/AFHTTPClient.h 0aeaa60a23b7ac5e41301bb570982ef5a6ab2722:AFNetworking/AFHTTPClient.h - 62 -1 74 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 3077 -2 75 | 9d399e9ffa837e75e98721dc39622e16b7a0ce96:Example/MainMenu.xib a3f39712c73e5f9d0aad11a2159043479fe57b29:Example/MainMenu.xib - 747 -2 76 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 2963 -2 77 | cc49cd8d1c4081ffd6a05cb112beb0d03b497f12:AFNetworking/UIImageView+AFNetworking.m 3ff5aafab72d2485631710718238e4990f2d02be:AFNetworking/UIImageView+AFNetworking.m + 154 0 78 | 3e3d94f93828f5eeb11fc1218c3bc45399e9a66e:AFNetworking/AFRestClient.h 5cf1028433228b20e7cf30a463353981809fcd0b:AFNetworking/AFRestClient.h - 59 -2 79 | e8d55c8896150fa888257f45eb397f934697b922:AFNetworking/AFHTTPClient.h 59039d6a8348c2591b1a6ecb0bfcb9b49f3036e8:AFNetworking/AFHTTPClient.h - 611 -1 80 | 87a90fe169e37d5172b82042b0feccc162125627:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 5b27bf6511d00f59a36440b5d7881ccf8475ef4b:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate - 1954 -2 81 | 957f18ba373ace2c2a47857d88ebfdb0b2b821c2:AFNetworking/AFHTTPSessionManager.m 210c260422b3d4226a141c616f14a8887b91a93f:AFNetworking/AFHTTPSessionManager.m + 170 -1 82 | 957f18ba373ace2c2a47857d88ebfdb0b2b821c2:AFNetworking/AFHTTPSessionManager.h 210c260422b3d4226a141c616f14a8887b91a93f:AFNetworking/AFHTTPSessionManager.h + 196 -1 83 | c94242d62f492b1935cb36b0faa7b9a7e420cc39:AFNetworking/AFURLRequestSerialization.m 422847539f8834e1081cd4d6f29e583769373c5d:AFNetworking/AFURLRequestSerialization.m - 382 -3 84 | 2c4a643d7d27b0340410942fe4bc7d62dd57bcbb:AFNetworking/AFHTTPClient.m 95442be7b30bba2dce13e2fc38af5004dd1a4de2:AFNetworking/AFHTTPClient.m + 206 -2 0 85 | 87a90fe169e37d5172b82042b0feccc162125627:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 5b27bf6511d00f59a36440b5d7881ccf8475ef4b:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate - 569 -2 86 | c94242d62f492b1935cb36b0faa7b9a7e420cc39:AFNetworking/AFSecurityPolicy.h 422847539f8834e1081cd4d6f29e583769373c5d:AFNetworking/AFSecurityPolicy.h - 120 -6 87 | ce1ebf3038aaa07053acdddeb4e4f49e1429ef9e:AFNetworking/UIImageView+AFNetworking.h 9a40c0dc0f27e9a547fb173a0b1b5a06072e91f9:UIKit+AFNetworking/UIImageView+AFNetworking.h + 39 -1 88 | eaa9059cd20ded46190dcda939882c02611f5333:Example/MainMenu.xib 9d399e9ffa837e75e98721dc39622e16b7a0ce96:Example/MainMenu.xib + 674 -1 89 | 87a90fe169e37d5172b82042b0feccc162125627:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 5b27bf6511d00f59a36440b5d7881ccf8475ef4b:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 2964 -2 90 | cbeca5da39bab56adc371753c91bb8c63350e74f:AFNetworking/AFURLSessionManager.m e3af1fde9cfd542ccb742479561a2140f77f2780:AFNetworking/AFURLSessionManager.m + 678 -1 91 | 4732be728e2b5fa77c80ab577f87e09db121d0aa:AFNetworking/AFHTTPClient.h ac30ff95448b8489607c9b35609f48756d4cb129:AFNetworking/AFHTTPClient.h + 586 -1 92 | 9e8ed1c4d772d7308b3ec172be2d38ddd7ed8c41:AFNetworking.xcworkspace/contents.xcworkspacedata f7504cf0e1c078eaf285e0c6f1370e0401ef07bf:AFNetworking.xcworkspace/contents.xcworkspacedata + 89 -1 93 | 87a90fe169e37d5172b82042b0feccc162125627:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 5b27bf6511d00f59a36440b5d7881ccf8475ef4b:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate - 2845 -2 94 | c94242d62f492b1935cb36b0faa7b9a7e420cc39:AFNetworking/AFURLRequestSerialization.m 422847539f8834e1081cd4d6f29e583769373c5d:AFNetworking/AFURLRequestSerialization.m - 416 -4 95 | 262ebd43cc593a82b147de737326dccc42f558cf:AFNetworking.xcworkspace/contents.xcworkspacedata 01f6aed22a357d5498eeb107d25ffbc7da101316:AFNetworking.xcworkspace/contents.xcworkspacedata - 12 -2 96 | 2c4a643d7d27b0340410942fe4bc7d62dd57bcbb:AFNetworking/AFHTTPClient.h 95442be7b30bba2dce13e2fc38af5004dd1a4de2:AFNetworking/AFHTTPClient.h + 39 -1 97 | e344585e590d9eca7c465e3ce687e6bca41d41d8:AFNetworking/AFSecurityPolicy.h 5eaa869b9e2afe2719e60e72d353d9b57af5b946:AFNetworking/AFSecurityPolicy.h + 88 -1 98 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 1306 -2 99 | d2b02c3f17933cd19e0d27ccc1278c7206de27fa:AFNetworking/AFHTTPRequestOperation.h 5b7a2cb05f1617a9e7da2f4e5a19eeb7588e8a83:AFNetworking/AFHTTPRequestOperation.h - 65 -1 100 | 25daf2cf693d492adccc625145467e144fda5bbd:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate 9054026304c9d951571c8ae2767d5e221ae3a22d:AFNetworkingExample.xcodeproj/project.xcworkspace/xcuserdata/mattt.xcuserdatad/UserInterfaceState.xcuserstate + 3488 -2 101 | b7564e9f5aa6b14bec0861bb7720b93d0b650353:AFNetworking/AFHTTPClient.h b28b99dd16882bea93e6ef357e90f9a9fad2f70c:AFNetworking/AFHTTPClient.h + 292 -2 0 102 | 58ca2e9ba0dd03fd158695a426df3e2b475d1c8d:AFNetworking/AFURLSessionManager.m ba7b6e541fd18bdf48da6d4845670e3e6b990637:AFNetworking/AFURLSessionManager.m + 259 -2 0 103 | ebe06c227d6deaaa027f51d40650dc7b111b6198:AFNetworking/AFURLConnectionOperation.h 4f89cc650ec115e9c6c35be856f7563748ff0b96:AFNetworking/AFURLConnectionOperation.h - 26 -1 104 | 151da2238d6eb1b7ac1efff4b66c62d4fbcdc071:AFNetworking/AFURLRequestSerialization.h d03552aca43372d8382b43afc14915a6e5161828:AFNetworking/AFURLRequestSerialization.h + 34 -1 105 | ce9bf4f853656a233b0a92db72cc6e4f407ab673:AFNetworking/AFURLRequestSerialization.m 7d8e2867e026c303c12b82896b734fb39ed60d9e:AFNetworking/AFURLRequestSerialization.m + 259 -2 0 106 | 2d9715471053c9a2b534b9cb5080a44774e0178c:AFNetworking/AFHTTPClient.h 6f20f84ef15d10fe59c38770563158459f40416d:AFNetworking/AFHTTPClient.h + 79 -1 107 | d03552aca43372d8382b43afc14915a6e5161828:AFNetworking/AFURLRequestSerialization.h 9be1743c533cfecb5aa51f35972fc06a66bd4a29:AFNetworking/AFURLRequestSerialization.h + 34 -1 108 | 1cfa4059577e173488457fc5eec95098115fda13:Example/iOS-Info.plist de76f997fbbfb03293c15e8077f63b1ee63433cf:Example/iOS-Info.plist + 47 0 109 | ca02e02b1164cfb884f3e313264034ddaaf7634d:AFNetworking/AFRestClient.m 8b8605185b86eebd0f202bee9ffb12decf47d053:AFNetworking/AFRestClient.m + 273 0 110 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Infrastructure for testing the handling of diff "sliders" 2 | 3 | ## Background 4 | 5 | If a block of lines is added or deleted from a file, there can be ambiguity about exactly which lines were added/deleted if 6 | 7 | * the first line that was added/deleted is identical to the line following the block, or 8 | 9 | * the last line that was added/deleted is identical to the line preceding the block. 10 | 11 | Sometimes `diff` chooses unwisely, resulting in unintuitive diffs like 12 | 13 | ``` 14 | @@ -2188,12 +1996,6 @@ 15 | return dir->nr; 16 | 17 | /* 18 | - * Stay on the safe side. if read_directory() has run once on 19 | - * "dir", some sticky flag may have been left. Clear them all. 20 | - */ 21 | - clear_sticky(dir); 22 | - 23 | - /* 24 | * exclude patterns are treated like positive ones in 25 | * create_simplify. Usually exclude patterns should be a 26 | * subset of positive ones, which has no impacts on 27 | ``` 28 | 29 | when the following diff makes more sense: 30 | 31 | ``` 32 | @@ -2188,12 +1996,6 @@ 33 | return dir->nr; 34 | 35 | - /* 36 | - * Stay on the safe side. if read_directory() has run once on 37 | - * "dir", some sticky flag may have been left. Clear them all. 38 | - */ 39 | - clear_sticky(dir); 40 | - 41 | /* 42 | * exclude patterns are treated like positive ones in 43 | * create_simplify. Usually exclude patterns should be a 44 | * subset of positive ones, which has no impacts on 45 | ``` 46 | 47 | I call ambiguous add/delete blocks like this "sliders", because there is some freedom to slide them up or down. 48 | 49 | 50 | ## Tools in this repository 51 | 52 | This repository contains a bunch of tools for 53 | 54 | * Finding sliders in arbitrary `git diff` output 55 | * Determining the range of "shifts" that are legal for a particular slider 56 | * Testing prototypes of heuristics for choosing how to shift sliders 57 | * Optimizing the heuristics by training them against a corpus of human-rated sliders 58 | * Recording the output of all of the above in text files 59 | * Displaying tricky cases in an easy-to-read format 60 | 61 | It also contains 62 | 63 | * A corpus of (at this writing) 6668 human-rated sliders from 29 open-source software projects 64 | * An implementation of an alternative slider positioning heuristic that significantly outperforms both `git diff` and `git diff --compaction-heuristic` as of Git 2.9.0. 65 | 66 | 67 | ## Getting started 68 | 69 | Suppose you have one or more versions of `git diff` that you would like to test against each other. The easiest way to start is by adapting and running `./run-comparison` in the top-level directory of this repository: 70 | 71 | 1. Write one function for each version of Git that you want to test at the top of `run-comparison`. You can use the existing functions `git_290`, `git_290_compaction`, etc. as examples. The function should take a repository name and the names of two git objects as arguments, and should output the diff between those two objects as output. The function name should start with `git_`. (The old and new objects will be supplied in the format `$SHA1:$PATH`.) 72 | 73 | 2. Adjust the initialization of the `algos` variable in `run-comparison` to list the algorithms that you want to compare. Note that these should be the short algorithm names; e.g., if your function is called `git_my_test_2`, then the short name would be `my-test-2`. 74 | 75 | 3. If you don't want to download the entire corpus (which is about 4 GB), adjust the script `repos` to output only the repositories that you want to download. 76 | 77 | 4. Run `./run-comparison`. The first time you run it, it takes quite a while because it fetches all 29 projects' history (about 4 GB). If you re-run it, it will only fetch any changes, so it should be much faster. 78 | 79 | The output of `./run-comparison` is a table like the following: 80 | 81 | | repository | count | 290 | compaction | indent-new | 82 | | --------------------- | ----: | -------------: | -------------: | -------------: | 83 | | afnetworking | 109 | 89 (81.7%) | 37 (33.9%) | 2 (1.8%) | 84 | | alamofire | 30 | 18 (60.0%) | 14 (46.7%) | 0 (0.0%) | 85 | | angular | 184 | 127 (69.0%) | 39 (21.2%) | 5 (2.7%) | 86 | | animate | 313 | 2 (0.6%) | 2 (0.6%) | 2 (0.6%) | 87 | | ant | 380 | 356 (93.7%) | 152 (40.0%) | 15 (3.9%) | 88 | | bugzilla | 306 | 263 (85.9%) | 109 (35.6%) | 15 (4.9%) | 89 | | corefx | 126 | 91 (72.2%) | 22 (17.5%) | 6 (4.8%) | 90 | | couchdb | 78 | 44 (56.4%) | 26 (33.3%) | 6 (7.7%) | 91 | | cpython | 937 | 158 (16.9%) | 50 (5.3%) | 5 (0.5%) | 92 | | discourse | 160 | 95 (59.4%) | 42 (26.2%) | 13 (8.1%) | 93 | | docker | 307 | 194 (63.2%) | 198 (64.5%) | 8 (2.6%) | 94 | | electron | 163 | 132 (81.0%) | 38 (23.3%) | 6 (3.7%) | 95 | | git | 536 | 470 (87.7%) | 73 (13.6%) | 16 (3.0%) | 96 | | gitflow | 127 | 0 (0.0%) | 0 (0.0%) | 0 (0.0%) | 97 | | ionic | 133 | 89 (66.9%) | 29 (21.8%) | 1 (0.8%) | 98 | | ipython | 482 | 362 (75.1%) | 167 (34.6%) | 11 (2.3%) | 99 | | junit | 161 | 147 (91.3%) | 67 (41.6%) | 1 (0.6%) | 100 | | lighttable | 15 | 5 (33.3%) | 0 (0.0%) | 0 (0.0%) | 101 | | magit | 88 | 75 (85.2%) | 11 (12.5%) | 0 (0.0%) | 102 | | neural-style | 28 | 0 (0.0%) | 0 (0.0%) | 0 (0.0%) | 103 | | nodejs | 781 | 649 (83.1%) | 118 (15.1%) | 5 (0.6%) | 104 | | phpmyadmin | 491 | 481 (98.0%) | 75 (15.3%) | 2 (0.4%) | 105 | | react-native | 168 | 130 (77.4%) | 79 (47.0%) | 0 (0.0%) | 106 | | rust | 171 | 128 (74.9%) | 30 (17.5%) | 14 (8.2%) | 107 | | spark | 186 | 149 (80.1%) | 52 (28.0%) | 2 (1.1%) | 108 | | tensorflow | 115 | 66 (57.4%) | 48 (41.7%) | 5 (4.3%) | 109 | | test-more | 19 | 15 (78.9%) | 2 (10.5%) | 1 (5.3%) | 110 | | test-unit | 51 | 34 (66.7%) | 14 (27.5%) | 2 (3.9%) | 111 | | xmonad | 23 | 22 (95.7%) | 2 (8.7%) | 1 (4.3%) | 112 | | --------------------- | ----- | -------------- | -------------- | -------------- | 113 | | totals | 6668 | 4391 (65.9%) | 1496 (22.4%) | 144 (2.2%) | 114 | 115 | `count` is the number of human-rated sliders in each repository. The columns are the different algorithms being tested; here, `290` is standard `git diff` using Git 2.9.0, `compaction` is `git diff --compaction-heuristic` using the same version of Git, and `indent-new` is the heuristic being proposed. The numbers show the number and percentage of human-rated sliders that the corresponding algorithm got *wrong*. 116 | 117 | 118 | ## Adding a new repository to the corpus 119 | 120 | More and more diverse training data means that the heuristic can be trained better. If you would like to add some training data, here is the procedure: 121 | 122 | 1. Choose a publicly-readable Git repository with content that is representative of one or more types of file. 123 | 124 | 2. Store the name of the repository in an environment variable (this makes later steps easier): 125 | 126 | repo=foo 127 | 128 | 3. Create a `corpus/*.info` file containing the URL that can be used to clone the repository: 129 | 130 | echo 'https://github.com/foo/foo' >corpus/$repo.info 131 | 132 | 4. Clone the repo: 133 | 134 | get-corpus $repo 135 | 136 | 5. Create a list of all of the "sliders" in the main branch of the repository. (You can choose some other range of commits if you prefer.) 137 | 138 | git -C corpus/$repo.git log --min-parents=1 --max-parents=1 --format='%P..%H' HEAD | 139 | ./enumerate-sliders --repo=$repo >corpus/$repo.sliders 140 | 141 | Note that this uses the installed version of `git` to compute the diffs, then detects sliders in its output and records them for later use. (The sliders are recorded in a generic format, so it doesn't really matter which version of Git is used for this step as long as it is not buggy.) 142 | 143 | 6. Create a file that displays all of the sliders along with their diffs in a human-readable format. This file can get big, so if you want you can trim down the input that is given to it, or simply interrupt the command when it has generated as much input as you want. 144 | 145 | ./compare-shifts --repo=$repo --all g=corpus/$repo.sliders \ 146 | >corpus/$repo-human-input.sliders 147 | 148 | 7. Hand-rate some sliders. (This is the part that is labor-intensive!) Open `corpus/$repo-human-input.sliders` in your editor. It will have lots of entries that look like the following: 149 | 150 | 327535b4be335df93a353032f7d3c01aae0942d7:Objects/bytearrayobject.c 83c63e9c025810342dd7f1f2107a2eee9525bc56:Objects/bytearrayobject.c + 1999 151 | # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 152 | # >PyDoc_STRVAR(hex__doc__, 153 | # >"B.hex() -> string\n\ 154 | # >\n\ 155 | # >Create a string of hexadecimal numbers from a bytearray object.\n\ 156 | # >Example: bytearray([0xb9, 0x01, 0xef]).hex() -> 'b901ef'."); 157 | # -2 | > 158 | # -1 | >static PyObject * 159 | # 0 || g >bytearray_hex(PyBytesObject *self) 160 | # || g >{ 161 | # || g > char* argbuf = PyByteArray_AS_STRING(self); 162 | # || g > Py_ssize_t arglen = PyByteArray_GET_SIZE(self); 163 | # || g > return _Py_strhex(argbuf, arglen); 164 | # || g >} 165 | # | g > 166 | # | g >static PyObject * 167 | # >_common_reduce(PyByteArrayObject *self, int proto) 168 | # >{ 169 | # > PyObject *dict; 170 | # > _Py_IDENTIFIER(__dict__); 171 | # > char *buf; 172 | # > 173 | # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 174 | 175 | The first line identifies the source of this slider: it comes from diffing the file Objects/bytearrayobject.c in the two specified commits. The diff adds (`+`) lines, and 1999 is the line number of the first added line in the version of the file that contains them, when the slider is shifted to its lowest possible position. 176 | 177 | The following lines show the slider itself: 178 | 179 | * A number, which is the relative shift that would move the first line of the add/delete block to that line 180 | 181 | * Two columns of `|` characters, showing the highest and lowest that the slider can be shifted 182 | 183 | * One or more columns of letters, showing where various algorithms that are under comparison would choose to shift the slider. In this case, there is only one algorithm being displayed, namely `g`, which in this case is the default Git positioning of the slider. 184 | 185 | * A column of `>` characters, showing the left margin of the actual lines 186 | 187 | * The lines themselves. 188 | 189 | Your job is to decide what would be the most intuitive position for this slider. The guidelines that I have been using when rating sliders by hand: 190 | 191 | * Best is if the diff inserts/deletes a single logical construct, for example a complete function definition, or an `else` with its associated block, or a paragraph within a comment. 192 | 193 | * If the diff adds/deletes an item in a list of items, then it should always show the item being added/deleted as late in the list as possible. 194 | 195 | * When possible, blank lines should appear at the bottom of the block of added/deleted lines rather than at the top. 196 | 197 | In the example above, the best position would be `-1`, because then the diff would show a single entire function being added. Record your selection at the end of the first line, changing it to: 198 | 199 | 327535b4be335df93a353032f7d3c01aae0942d7:Objects/bytearrayobject.c 83c63e9c025810342dd7f1f2107a2eee9525bc56:Objects/bytearrayobject.c + 1999 -1 200 | 201 | If there are multiple positions that are equally good, you can record them all; e.g., `-2 0`. 202 | 203 | Rate as many sliders as you like, then save the file. 204 | 205 | 8. Create a file containing only the sliders that you have rated without any diffs: 206 | 207 | ./filter-sliders --rated >corpus/$repo-human.sliders 208 | 209 | This file is the permanent record of your work. 210 | 211 | 9. Commit the `$repo.info` file and the `$repo-human.sliders` file into Git: 212 | 213 | git add corpus/$repo.info corpus/$repo-human.sliders 214 | git commit -m "Add sliders from repo $repo to the corpus" 215 | 216 | 10. Push your changes to GitHub and create a pull request. 217 | 218 | 219 | ## Adding more human ratings for a repository that is already in the corpus 220 | 221 | 1. (If you haven't already done so:) Download and/or update the repository: 222 | 223 | repo=foo 224 | get-corpus $repo 225 | 226 | 2. (If you haven't already done so:) Create a list of the sliders in the repository: 227 | 228 | git -C corpus/$repo.git log --min-parents=1 --max-parents=1 --format='%P..%H' HEAD | 229 | ./enumerate-sliders --repo=$repo >corpus/$repo.sliders 230 | 231 | 3. Create a file that displays a bunch of unrated sliders in human-readable form: 232 | 233 | ./filter-sliders --omit-rated=corpus/$repo-human.sliders corpus/$repo-human-input.sliders 236 | 237 | This command uses `shuf` to choose 1000 of the sliders at random. Feel free to adjust that part of the pipeline, or use other commands to select the sliders that you would like to work on. Just remember: please try to pick a characteristic sample of sliders! If we end up with 100 times more samples of FORTRAN 66 code than C, it's going to bias any automated training that uses the corpus in a bad way! 238 | 239 | 4. Hand-rate some sliders as described in step 7 of the previous section. 240 | 241 | 5. Append the newly-rated sliders to the end of the existing `$repo-human.sliders` file: 242 | 243 | ./filter-sliders --rated >corpus/$repo-human.sliders 244 | 245 | 6. Commit the new `$repo-human.sliders` file into Git, push your changes, and create a pull request. 246 | 247 | 248 | ## Testing a different prototype heuristic 249 | 250 | *To be written.* 251 | 252 | 253 | ## Testing a different Git version 254 | 255 | If you've got an experimental version of Git that you would like to test, you probably want to see not only the numerical results, but also examples of diff sliders that it bungles: 256 | 257 | 1. Make sure that you have created the `corpus/$repo.sliders` file as described in one of the earlier sections. 258 | 259 | 2. Have your own experimental version of Git compute the same diffs that appear in the sliders, and read the shift that it chose using `read-shift`: 260 | 261 | cat corpus/$repo.sliders | 262 | while read old new prefix line_number shifts 263 | do 264 | $EXPERIMENTAL_GIT -C corpus/$repo.git diff $EXPERIMENTAL_GIT_OPTS -U20 "$old" "$new" -- | 265 | ./read-shift "$old" "$new" "$prefix" "$line_number" 266 | done >corpus/$repo-experimental.sliders 267 | 268 | 3. View the sliders for which your version's output differed from the standard version, the human version, or any other version that you have an output slider file for: 269 | 270 | ./compare-shifts --repo=$repo --any-wrong --controversial \ 271 | h=corpus/$repo-human.sliders \ 272 | g=corpus/$repo.sliders \ 273 | x=corpus/$repo-experimental.sliders \ 274 | >corpus/$repo-experimental-disagreements.out 275 | 276 | 4. Perhaps add more human ratings for sliders that are still unrated but for which one or more of the algorithms disagreed with each other: 277 | 278 | ./compare-shifts --repo=$repo --controversial --no-diff \ 279 | h=corpus/$repo-human.sliders \ 280 | g=corpus/$repo.sliders \ 281 | x=corpus/$repo-experimental.sliders | 282 | shuf -n 1000 | 283 | ./compare-shifts --repo=$repo \ 284 | h=corpus/$repo-human.sliders \ 285 | g=corpus/$repo.sliders \ 286 | x=corpus/$repo-experimental.sliders \ 287 | >corpus/$repo-human-input.out 288 | 289 | `compare-shifts` has a few other options that you might find useful. Another program, `filter-sliders`, can also be used to help select the sliders that you want. Run either program with its `--help` option to get more information. 290 | 291 | See *Adding more human ratings for a repository that is already in the corpus* for how to continue. 292 | 293 | 294 | ## Tabulate results 295 | 296 | If you have already followed the steps above, then the data for your algorithm should be in files called `corpus/$repo-$algo.sliders`. The results can be summarized by running 297 | 298 | ./summarize $algo 299 | 300 | You can specify as many algorithm names as you like on the command line. 301 | 302 | 303 | ## Prototype heuristic 304 | 305 | The heuristic that is prototyped here chooses its shifts based only on the indentation of lines around the slider plus the presence/absence of blank lines nearby. It computes a score for the split that would have to be introduced at the top of the slider, and one for the split at the bottom of the slider, then adds the scores together to get an overall score for a slider shift. The shift with the lowest score wins. 306 | 307 | The implementation of the scoring algorithm is in `diff_heuristics.py`, in the `SplitScorer` classes. Feel free to play with it and tweak it. Remember, whatever heuristic we build into Git has to work acceptably well across a wide variety of programming languages and other textual input! 308 | 309 | The prototype heuristic can be analyzed by piping a `*.slider` file to `show-slider-scores`, or as follows to analyze a single slider: 310 | 311 | ``` 312 | $ echo '8ad3cb08690bdf9a340e47ed4fdb67cbacd1edf2:dir.c 5cee349370bd2dce48d0d653ab4ce99bb79a3415:dir.c - 2191' | ./show-slider-scores --repo=$repo 313 | 8ad3cb08690bdf9a340e47ed4fdb67cbacd1edf2:dir.c 5cee349370bd2dce48d0d653ab4ce99bb79a3415:dir.c - 2191 314 | vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 315 | > PATHSPEC_ICASE | 316 | > PATHSPEC_EXCLUDE); 317 | > 318 | > if (has_symlink_leading_path(path, len)) 319 | > return dir->nr; 320 | | 156 > 321 | | 152 - > /* 322 | || 188 - >- * Stay on the safe side. if read_directory() has run once on 323 | || - >- * "dir", some sticky flag may have been left. Clear them all. 324 | || - >- */ 325 | || - >- clear_sticky(dir); 326 | | - >- 327 | | >- /* 328 | > * exclude patterns are treated like positive ones in 329 | > * create_simplify. Usually exclude patterns should be a 330 | > * subset of positive ones, which has no impacts on 331 | > * create_simplify(). 332 | > */ 333 | > simplify = create_simplify(pathspec ? pathspec->_raw : NULL); 334 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 335 | ``` 336 | 337 | This output includes the heuristic's scores for each possible shift of the slider. The lowest score (e.g., 152 in this example) wins. The `+` or `-` symbols to the left of the `>` show the heuristic's preferred shift; those to the right of the `>` show the shift chosen by the installed `git diff`. 338 | 339 | 340 | -------------------------------------------------------------------------------- /corpus/ionic-human.sliders: -------------------------------------------------------------------------------- 1 | 4aa322d33b706bdae2dfdb14fed7faa67ca92c72:src/components/item/item.ts 712ff81fb59e47db92bd93ddf2cd7c7002a82220:src/components/item/item.ts + 212 0 2 | 2fe42ed63e85cf9d3ff1a64ef28624c7bffc3274:src/components/nav/nav-controller.ts 215c6d846c6eb157b4510e63d863d2fdcf13b9af:src/components/nav/nav-controller.ts + 1712 -3 3 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.dev.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.dev.js - 22888 -1 4 | 3d5944c5c619c73bf835f03ea48feb3beec48213:ionic/components/button/modes/ios.scss 78a3ce12b17e6acdf9cf502d0f629bac2d3e1257:ionic/components/button/modes/ios.scss + 16 0 5 | 1495a1353eb7a2501db955c52d9b4be5ba2c9bd6:ionic/config/modes.ts a9c995d07d6cf365d5e95f6fd5f06dfd6d296b97:ionic/config/modes.ts + 60 0 6 | 923a492d207eea39175ec9420d150564cb65821f:ionic/components/nav/nav.ts 085ee958c48d695ba50822d8767d615fd9e887fa:ionic/components/nav/nav.ts - 357 -2 7 | acf12cdd150e25b23f06fe68bdaeb478e1627b4f:demos/local-storage/index.ts ca50527437f7818bd3d7ae7bdddcc7abebae9507:demos/local-storage/index.ts + 10 -1 8 | 898160cca263e29c5ea6e8b35bbeb58b6950b5bb:scripts/resources/angular2.js 13cd3da6b24e08afb4d1205a2833f44a8a7734eb:scripts/resources/angular2.js + 31333 0 9 | dafa400230bbb1ffe7ea595728e2bc373fabe784:ionic/components/toggle/toggle.ts 5034c1d7298fff9d2dc8f06ee9be79546b1d7bce:ionic/components/toggle/toggle.ts - 122 -2 10 | ed8335da109b7bb9eab5ddd33669a8f795a8dcf4:ionic/components/nav/view-controller.ts daa4ccc30cddc5739baa91694a7ba548f769979b:ionic/components/nav/view-controller.ts + 325 -3 11 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.js - 27712 -1 12 | 2710e3485178da984d32473956ca5b309e631f6c:gulpfile.js c6067c0faa856352ef548a8ca01c89d36272b8c4:gulpfile.js + 141 0 13 | b059c88fc77c5d87f08f8280e114468d2f35d02a:ionic/components/app/test/material/index.ts c6009dd651942e7d486b1c9e698ef264222a5fb9:ionic/components/app/test/material/index.ts + 41 0 14 | 703a3678e64b561790b0418011268072cf1cfb2b:ionic/components/toolbar/test/scenarios/main.html db714ce341a4b8a150699e6a1c3f159c4a461dd0:ionic/components/toolbar/test/scenarios/main.html - 145 -2 15 | 898160cca263e29c5ea6e8b35bbeb58b6950b5bb:scripts/resources/angular2.js 13cd3da6b24e08afb4d1205a2833f44a8a7734eb:scripts/resources/angular2.js + 30164 0 16 | ea884ded6d1a81b6e533ebcc918b2c8e15d9ea61:ionic/components/list/list.ts fdb311d397f17c6a1defced4340bd4a30f7d6926:ionic/components/list/list.ts - 36 -3 17 | d0a077c5356f82adee3eb4b996bfee869e640f79:ionic/components/text-input/text-input.ts f7bed3e098eff109aacd5b76462f0ffd04819025:ionic/components/text-input/text-input.ts - 17 -3 18 | 535856155bce77550f5f46bf680131b0654ce088:ionic/platform/platform.ts 703fe161540fd3059daaa7ebf0b7daf5c1828ac3:ionic/platform/platform.ts - 466 -3 19 | 1225336fabfe7841b0494f1f32c0cd20f5b2ca07:ionic/components/nav/nav-controller.ts d4a300552431f30c4f31faf142bd1b61798b4bab:ionic/components/nav/nav-controller.ts - 672 -2 20 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.js - 12912 -1 21 | 4aa322d33b706bdae2dfdb14fed7faa67ca92c72:src/components/item/item.ts 712ff81fb59e47db92bd93ddf2cd7c7002a82220:src/components/item/item.ts + 131 0 22 | a76808b4f1a6ac6b68003f3ce4d01c1b0912935a:ionic/components/tabs/tab.ts e06cf71aae1b0745639839d636173020db49ba26:ionic/components/tabs/tab.ts + 108 -1 23 | 2fe42ed63e85cf9d3ff1a64ef28624c7bffc3274:src/components/nav/view-controller.ts 215c6d846c6eb157b4510e63d863d2fdcf13b9af:src/components/nav/view-controller.ts - 85 -3 24 | 53fd3c39734389bcf0e58d93043371880793f77d:src/components/popover/popover.wp.scss a96e36aa0edb3f6e371a96281f97cf5527eb41ab:src/components/popover/popover.wp.scss - 28 0 25 | 1a5821b77f7a367bc7bba47b923d448c465bc189:ionic/components/slides/slides.ts daceb9810c85af78a3b6b46a9d0281ee92f4e562:ionic/components/slides/slides.ts + 220 -2 26 | c15269341f175b2eef7f872a30c4e35819f56727:src/components/range/range.ts 55eccb34938734150607eb3b0fd59c3fba95bfd0:src/components/range/range.ts + 299 -1 27 | 11b8e085675ec72be5c1c4ae636d627740dbf12a:ionic/components/input/input.ts c56382925f091973510434cab19e29cd98687163:ionic/components/input/input.ts - 113 0 28 | c65a4fb3e92694d61e83c42abc20ea94778e6702:src/components/nav/nav-controller.ts a655cd78acba2e2102d6ac02153275ecb832f8cc:src/components/nav/nav-controller.ts + 1679 -2 29 | 898160cca263e29c5ea6e8b35bbeb58b6950b5bb:scripts/resources/angular2.dev.js 13cd3da6b24e08afb4d1205a2833f44a8a7734eb:scripts/resources/angular2.dev.js + 31274 -1 30 | 54d612bf65ab13f954211106a17cb100a5fedc24:ionic/components/tabs/tabs.ts 63398f345052014a9c88f9b1383aa408682303b4:ionic/components/tabs/tabs.ts + 203 0 31 | 087e2f248033cd6a062000786c5eea764a2bd052:src/components/tabs/tabs.ts 4dc53a2d9dbbbdf73d44a994784414ca9fb76c3f:src/components/tabs/tabs.ts + 212 -1 32 | b89f383ecc31e46b12332cbdf0dc263891209304:scripts/resources/angular2.dev.js 8794182e6c0ff0d0b23570002893444a09f2043d:scripts/resources/angular2.dev.js + 26319 -1 33 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.dev.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.dev.js - 27819 -1 34 | 2a32711857dfd48d675fbcea4d89c618fa0384ee:ionic/components/toggle/toggle.ts 7c8c56ee3ec9a37ca5b9be6dac96fe03c2a87b0d:ionic/components/toggle/toggle.ts + 268 0 35 | 5cb9d65146bb25a1d5bed105b06f762ebdfcbbd6:src/components/content/content.ts 0579bbafc95a4100355db4cd04b3c0e0b99d9f58:src/components/content/content.ts + 47 0 36 | 654bb8cd97b547744d81238544957e0169bb9541:ionic/components/app/test/sink/pages/tabs.ts e231579c6e81ce87744dda513cd1c576039bbb16:ionic/components/app/test/sink/pages/tabs.ts + 37 -1 37 | 1473011a89b8a2b74eee4d162bca04976dc3d1d4:ionic/config/config.ts 2b77d52061b2107bb100643bd7072d4cb61de55a:ionic/config/config.ts - 66 0 38 | 6f3dd4eb7da9fde3e4f326a214866b5f5f88e110:ionic/components/view/view-item.js 42a641a03ec578186f3affce85f1c4050b9da649:ionic/components/view/view-item.js - 290 -1 39 | 80b2579609eb552e279cee453de5bd84d7c96a20:ionic/components/searchbar/searchbar.ts 20585106ffa7d4f0d313fa52ad6464727b8199a1:ionic/components/searchbar/searchbar.ts + 87 0 40 | 18519d1576482f3907d0afdccd408da43ea17ecf:ionic/components/button/test/block/main.html f18d114dbe8e7796a65b5d12be57fc02fb26c057:ionic/components/button/test/block/main.html + 14 -1 41 | 6390d768de4de9338cfd4c4b9be6e205102da0cd:ionic/components/tabs/modes/ios.scss 246fd977f222d97366f113353a633287fb65ef13:ionic/components/tabs/modes/ios.scss + 91 0 42 | 898160cca263e29c5ea6e8b35bbeb58b6950b5bb:scripts/resources/angular2.dev.js 13cd3da6b24e08afb4d1205a2833f44a8a7734eb:scripts/resources/angular2.dev.js - 28167 -1 43 | 3fafab21f0b28f35c0ca2efb4342eab1c0a8411c:ionic/components/button/test/outline/main.html f70aff18957b1571ce1d6537789972b606acbe14:ionic/components/button/test/outline/main.html - 11 -1 44 | f3e2f427bf071b8f38f463325f868389e04dfc88:ionic/components/tabs/test/advanced/index.ts 0dd6b2f4bd43c5074abf71560f192b9f7a1a8c58:ionic/components/tabs/test/advanced/index.ts + 40 -1 45 | 5a85d82b8a0a41b594edf62b32f43740358fd041:src/platform/cordova.scss 15642e4847402a8679af02317ba599070fd53251:src/platform/cordova.scss - 70 0 46 | a76808b4f1a6ac6b68003f3ce4d01c1b0912935a:ionic/components/nav/view-controller.ts e06cf71aae1b0745639839d636173020db49ba26:ionic/components/nav/view-controller.ts + 40 -3 47 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.js + 16243 -1 48 | 71f19ccac42e57f43e83699f5a8b8a2d9c4a5c6a:ionic/platform/platform.ts 747c5138c5f3f64633c48b36adbbe4de1671044b:ionic/platform/platform.ts + 280 -3 49 | df07682407612cdb5711f2c4b7cea89106cab603:src/components/modal/modal.ts fbe6f82c89579fc0c31ddb83411f6a77ed41d2b4:src/components/modal/modal.ts + 125 0 50 | 898160cca263e29c5ea6e8b35bbeb58b6950b5bb:scripts/resources/angular2.dev.js 13cd3da6b24e08afb4d1205a2833f44a8a7734eb:scripts/resources/angular2.dev.js + 30374 -1 51 | 1adb91e6d8e42ec5890049f7d95a2472ba5a36a9:src/components/nav-view/nav-view.js 54d3418d50123dae8abafaaccad3761ae88bdb98:src/components/nav-view/nav-view.js + 109 0 52 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.js - 20150 -1 53 | 5304ec8d79aeb30150a91a63601ef50e048ef4b7:ionic/components/blur/blur.ts ade88a92ed0ba197c0c502736e3feeb115c95a5f:ionic/components/blur/blur.ts + 10 0 54 | 8148927c88beb1736ad8ba365248fc75a958eaef:ionic/components/button/button.scss 90ad47583623608128d22afe4d0ec221900e7ebf:ionic/components/button/button.scss + 85 0 55 | 3bb09cee07d6e0cfe17d5a9ed3fcc5dd24800bf1:ionic/components/toggle/toggle.ts e468a2113923e66f141914363a9202a594ee97a3:ionic/components/toggle/toggle.ts + 186 -3 56 | 9f293e85496404364c08a8275c04f52d19dacea6:src/components/toast/toast.ts 82adf6f3d36b236f12eb0b0bc1f170681f73bb24:src/components/toast/toast.ts + 29 0 57 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.js + 16368 -1 58 | de9a98623605f5ee9b8527911f3c32670dc071b0:ionic/components/toolbar/toolbar.ts d971f3ec89b1b4fc83e01f21816ec1b66c03b3dc:ionic/components/toolbar/toolbar.ts + 79 0 59 | 2a4602cd0920bcc98be116ae242cb5a1f9cbee16:ionic/components/app/test/cordova/index.ts f45ddf90878dd60a1e997aa3e1ec34e0575bcff2:ionic/components/app/test/cordova/index.ts + 81 -1 60 | 2fe42ed63e85cf9d3ff1a64ef28624c7bffc3274:src/components/nav/nav-controller.ts 215c6d846c6eb157b4510e63d863d2fdcf13b9af:src/components/nav/nav-controller.ts - 246 -3 61 | f70aff18957b1571ce1d6537789972b606acbe14:ionic/components/switch/extensions/ios.scss 147a7e68ff5f45e273d580919fbc149de5e7114e:ionic/components/switch/extensions/ios.scss + 120 0 62 | ccf6ae5dd34e8d733617bd0567d570b2eb1988fa:src/components/select/test/single-value/main.html b5b804725fdb64f853b6633c441bec7fe30a4290:src/components/select/test/single-value/main.html + 107 0 63 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.dev.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.dev.js + 17184 -1 64 | 3fafab21f0b28f35c0ca2efb4342eab1c0a8411c:ionic/components/button/test/outline/main.html f70aff18957b1571ce1d6537789972b606acbe14:ionic/components/button/test/outline/main.html - 35 -1 65 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.js - 18645 -1 66 | a07dd80117bc50216bf61dab02d6c41b27310864:ionic/components/nav/nav-controller.ts b9d69da414fefd5840fb65252057a952afeac0b5:ionic/components/nav/nav-controller.ts - 43 0 67 | f74606dc1be56d34f134d7b9feb790b78d5362dc:ionic/components/checkbox/checkbox.ts 2070e58e3e38ed71549268b59bbc56e810b321dc:ionic/components/checkbox/checkbox.ts + 116 -2 68 | 4a6086c1f8e756b86460697f685af0c8f81e3019:src/components/app/app.ts 4f52135c1335aba8dcc4dc82998bab0f063eabe3:src/components/app/app.ts + 97 -2 69 | 5b0eda5be11ebd1409db7612695e58cc7774d108:ionic/components/nav/nav.ts 539edf8ebd4756dccd415c0f33d4ed386280d375:ionic/components/nav/nav.ts + 15 0 70 | 8710ddb38cd7b8de0582b3130da018d19a44d361:demos/component-docs/cards/cards.ts dda5c762a7f13c22ac86f51982061b2c53b1897e:demos/component-docs/cards/cards.ts + 85 0 71 | 898160cca263e29c5ea6e8b35bbeb58b6950b5bb:scripts/resources/angular2.js 13cd3da6b24e08afb4d1205a2833f44a8a7734eb:scripts/resources/angular2.js + 29822 -1 72 | 7842991c1a0771639df5e7c7df0eed47549c5a00:src/components/content/content.ts f20c7e42a23cc514c10275908e684065c6b07793:src/components/content/content.ts + 331 -1 73 | 64af0c8ba081c731c59641247e55f1899a871f4f:src/animations/animation.ts d13fa4e2cfc3b3039239a9e09ea701ad9bc624b4:src/animations/animation.ts + 247 0 74 | b3bea838b24355ceffefbb1ffa194db4f3f7846b:ionic/components/select/select.ts 81096f1c125b46102b0631091592fbb38af075e4:ionic/components/select/select.ts + 161 -1 75 | 16c99e97c9fc5b8523f007352e5ae5d78c7189ae:demos/component-docs/cards/cards.ts 82ca227f7fb4499da9d65efb229d87854acf5f70:demos/component-docs/cards/cards.ts - 77 -1 76 | ea450d41d3295f830d59ca764bea0ef2e3bbd476:src/components/select/select.ts 461ba11de9d93f44111fc0eb3860e19abf3ab893:src/components/select/select.ts + 164 -1 77 | b3b553e50f1cb2e225346cc677bc2aeb1aa02ad3:ionic/components/slides/slides.ts 7263728da11cb03c30d500cf41cb0b1947f37b2e:ionic/components/slides/slides.ts + 91 -3 78 | 4698763ce73d61662afa66ab1e5bf6ee3631dc09:ionic/components/item/test/icons/main.html 7084d547123c9edb9f9b07a7cfbdf99a427b15a3:ionic/components/item/test/icons/main.html + 33 0 79 | 6fa2faffba07981b6ac767824b6a95fe56b58e9b:src/components/content/test/basic/index.ts 1c2acc0c6a5ca351cf54a8e1cb71663dc888367a:src/components/content/test/basic/index.ts + 42 -1 80 | 5e8450df06a98fe6ebfb1fe7f5c9f042f17cf454:ionic/components/text-input/text-input.ts 49beefdf6e7833e9288bcef8f440d1b6b5c21532:ionic/components/text-input/text-input.ts + 153 -2 81 | 5909fa4ba535588af3e7dd79f0f4b8c4681dc70d:src/components/tabs/tabs.ts 0a7d865975b5093bc791b36bab90acdfb36a63ff:src/components/tabs/tabs.ts + 517 -2 82 | 4f81e5b8c8e752255d60281dc921aab16ad15d53:demos/component-docs/app.css 0b2b54006fc3bc7773ee68dc691470286f5838e4:demos/component-docs/app.css + 322 0 83 | 9819aae69b7f243ac94fd15a1495bd31185ed1a3:src/components/searchbar/searchbar.ts 31c7e595dab112dba7e2de094dfe1affcf4ec1f7:src/components/searchbar/searchbar.ts - 197 -2 84 | 2c6e11b10dc53790fd033b1619503adf08a8e87e:src/components/range/range.ios.scss af6d5e4be4345984ac27568943e4b7dd65fcf2ad:src/components/range/range.ios.scss + 169 0 85 | 49e1b2034221db3166a228c6bbc2946c93e4464a:ionic/components/nav/nav-controller.ts e6a673bd32c2ed14e8b42f82a6a2bb566c08c500:ionic/components/nav/nav-controller.ts + 226 -1 86 | b3a7298a522498b4fc3d4b27addb6aaa37a00944:ionic/components/input/test/fixed-inline-labels/main.html 42f6b1056f08bbf1dbcd29e569b44a6d7aae8f47:ionic/components/input/test/fixed-inline-labels/main.html + 29 -1 87 | 3fa2f6b7de4d519cc3e66c4dd1c519f6ac7157eb:demos/component-docs/app.scss 9c23eb45bdef78c6d955e4c7f15e7d396303b8aa:demos/component-docs/app.scss + 344 -1 88 | 9888a9c15516dffbb414a3c31f0a81376cb1bd68:ionic/components/menu/menu.ts ff24152524fabb1aaca0ab7314e2e8ca2bbb7af7:ionic/components/menu/menu.ts + 184 -3 89 | 066ab712c018d9e49005417481ccd2597a349d1d:ionic/components/picker/picker.ts aa9a667a3f8031248e55d6326d24c90d83703c6c:ionic/components/picker/picker.ts - 18 0 90 | 898160cca263e29c5ea6e8b35bbeb58b6950b5bb:scripts/resources/angular2.js 13cd3da6b24e08afb4d1205a2833f44a8a7734eb:scripts/resources/angular2.js + 23390 -1 91 | 239a2d510224c3b276bb2bf004323326b98b73ee:ionic/components/badge/badge.scss 5e4220ae1e8c2f3db8b97db5a8ba0d374c8a1ac2:ionic/components/badge/badge.scss - 30 0 92 | b89f383ecc31e46b12332cbdf0dc263891209304:scripts/resources/angular2.dev.js 8794182e6c0ff0d0b23570002893444a09f2043d:scripts/resources/angular2.dev.js + 29992 -1 93 | 6f8f2ab83fb490f6d68428c02bc243b3785dab28:src/components/tabs/tabs.ts d98f3c9bd7e5dfcbd8878e5f20c3c211939b4787:src/components/tabs/tabs.ts + 181 -3 94 | 5119b57496f9778d414f6f2e7a621b35a48e1554:src/components/item/item-reorder.ts d993a1bfd86f6987e44f0a78fa5b4a46026de779:src/components/item/item-reorder.ts + 195 -3 95 | 71f19ccac42e57f43e83699f5a8b8a2d9c4a5c6a:ionic/platform/platform.ts 747c5138c5f3f64633c48b36adbbe4de1671044b:ionic/platform/platform.ts + 316 -3 96 | d6589e1586bb2711992eedfb5a2ac675718e512f:ionic/components/loading/loading.ts 25a43410adf6138e0d4487bcca7e3d17a40020bc:ionic/components/loading/loading.ts + 76 0 97 | 3d5944c5c619c73bf835f03ea48feb3beec48213:ionic/components/button/button-outline.scss 78a3ce12b17e6acdf9cf502d0f629bac2d3e1257:ionic/components/button/button-outline.scss - 17 0 98 | cd4f683ce505cf9178257eb0479c90900cfec51f:ionic/components/app/structure.scss 36f82b2473e08a61bbe18061d70c413074e93965:ionic/components/app/structure.scss + 150 0 99 | e4b200639e9fe3b9e2c63a5f92002d5b61e04fe0:ionic/components/label/label.md.scss b3a7298a522498b4fc3d4b27addb6aaa37a00944:ionic/components/label/label.md.scss + 16 -1 0 100 | 55eccb34938734150607eb3b0fd59c3fba95bfd0:src/components/item/item-sliding.ts 2392d1da66b083750a5ed568b6d15b1acc440fdb:src/components/item/item-sliding.ts + 100 0 101 | 8945bf906d68d469e4653a9db2f564bc588eb0d6:src/components/tabs/tabs.ts 4a6086c1f8e756b86460697f685af0c8f81e3019:src/components/tabs/tabs.ts - 517 -2 102 | f3eb5fd3f2ef007b2c0432a7e81bde9be580c131:src/components/tabs/tabs.ts 087e2f248033cd6a062000786c5eea764a2bd052:src/components/tabs/tabs.ts + 230 -3 103 | 94707bfe8e6f100410ba8765b6d7327fc9dc0a7c:ionic/components/refresher/refresher.ts 904775430bf0d7f261a4dff27d2f62085180ab15:ionic/components/refresher/refresher.ts + 21 0 104 | f3eb5fd3f2ef007b2c0432a7e81bde9be580c131:src/components/tabs/tabs.ts 087e2f248033cd6a062000786c5eea764a2bd052:src/components/tabs/tabs.ts + 178 -1 105 | 9819aae69b7f243ac94fd15a1495bd31185ed1a3:src/components/searchbar/test/nav/index.ts 31c7e595dab112dba7e2de094dfe1affcf4ec1f7:src/components/searchbar/test/nav/index.ts + 94 -1 106 | 7e98c102d54a68142e6470171c1ca69cf0c7abb1:ionic/components/nav/nav-controller.ts ff10b3bb497458341c1e21751df7e95933f416f9:ionic/components/nav/nav-controller.ts - 1356 -2 107 | 57a1274b6cff4e2c7bd1dddc94fe402ed51f5664:src/components/popover/test/basic/index.ts 4db72cfc2cc684a6e44f3df049a4eb51c0d63171:src/components/popover/test/basic/index.ts + 157 -1 108 | 0983a180d318bb4b6503f3c2372d7146ae8d4ae9:src/components/button/test/clear/main.html 738436834cd514079527e9680f296a137f2e0cf4:src/components/button/test/clear/main.html - 17 -1 109 | ccf6ae5dd34e8d733617bd0567d570b2eb1988fa:src/components/select/select.ts b5b804725fdb64f853b6633c441bec7fe30a4290:src/components/select/select.ts - 179 -1 110 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.dev.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.dev.js + 16350 -1 111 | 5030246c5db05adf5b7ed9629cc2277ca9f97f4f:ionic/components/segment/segment.ts 4fca31ec3698acc86ede03764be4c227f5cf7f40:ionic/components/segment/segment.ts + 75 -2 112 | 5302d63b54bf116b706e16688da56afa0c105fd8:ionic/components/app/app.ts 3c8daa0781f15e788fb36c0fb2b0926c9b0932c7:ionic/components/app/app.ts + 41 -1 113 | 703a3678e64b561790b0418011268072cf1cfb2b:ionic/components/toolbar/test/scenarios/main.html db714ce341a4b8a150699e6a1c3f159c4a461dd0:ionic/components/toolbar/test/scenarios/main.html - 86 -2 114 | 7b1d7aa1c759aa73545dc6d0b057dee8d75fe2ef:ionic/components/nav/nav-controller.ts 17c38862cc6afe171bf8232e0e4e5642336c66b2:ionic/components/nav/nav-controller.ts - 1469 -1 115 | eb4261c323f0c8ae03fb06c4b266aaa0edf49448:src/components/searchbar/searchbar.ts 9a9aa5e0180cbd14a3bb5fbadb708ffbf38d003e:src/components/searchbar/searchbar.ts - 9 -1 116 | 2fe42ed63e85cf9d3ff1a64ef28624c7bffc3274:src/components/app/app.ts 215c6d846c6eb157b4510e63d863d2fdcf13b9af:src/components/app/app.ts - 211 -1 117 | 066ab712c018d9e49005417481ccd2597a349d1d:ionic/components/picker/test/basic/index.ts aa9a667a3f8031248e55d6326d24c90d83703c6c:ionic/components/picker/test/basic/index.ts + 167 0 118 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.js + 16968 -1 119 | 2d10593dce04b11d92ae4155b6e18256f4c54418:ionic/components/menu/menu.ts 0ef8c78737017230bf9023b7ccfc6d3ed94bd070:ionic/components/menu/menu.ts + 382 -1 120 | 8945bf906d68d469e4653a9db2f564bc588eb0d6:src/components/tabs/tabs.ts 4a6086c1f8e756b86460697f685af0c8f81e3019:src/components/tabs/tabs.ts + 176 -1 121 | 8945bf906d68d469e4653a9db2f564bc588eb0d6:src/components/nav/nav-controller.ts 4a6086c1f8e756b86460697f685af0c8f81e3019:src/components/nav/nav-controller.ts + 232 -1 122 | 103551c056723f5bb3188aee04befcbe1111580c:ionic/components/modal/modal.ts 68ee8065c81023a475ff19bfc18e1cf957a3c601:ionic/components/modal/modal.ts + 14 0 123 | 015361d5c03738f1d42720d8fd09c1419e86a3c1:ionic/components/input/test/form-inputs/main.html 4cfe210a5a0bf42968f425c4064e5859b80e0f91:ionic/components/input/test/form-inputs/main.html + 94 -1 124 | a97527e0ad48fe41c589fd6867f676f4d3d9332f:scripts/resources/angular2.dev.js 504ab46eb30ecf51f9de801ace0a21f25c20a8fe:scripts/resources/angular2.dev.js + 21471 -1 125 | cca3309f4c38a2d6fa7a8832d3912bcbca5467be:src/components/tabs/tabs.ts 743de19ae898e83375b51ef9c376225c8e63f0ef:src/components/tabs/tabs.ts - 228 -3 126 | 84f37cf4d59dc9f95dca60a5139ed7873b42f44b:src/components/nav/nav-controller.ts 9f293e85496404364c08a8275c04f52d19dacea6:src/components/nav/nav-controller.ts + 251 -3 127 | dda5c762a7f13c22ac86f51982061b2c53b1897e:demos/component-docs/cards/cards-background.html 24264c459e3539619b587f5a61b0c86de2530eee:demos/component-docs/cards/cards-background.html - 9 -1 128 | 9888a9c15516dffbb414a3c31f0a81376cb1bd68:ionic/components/menu/menu.ts ff24152524fabb1aaca0ab7314e2e8ca2bbb7af7:ionic/components/menu/menu.ts - 45 -3 129 | f440f029f34d8b57ca2045eb27543c11181a9583:ionic/components/nav/nav-controller.ts ed72a7a1606502cbcbf0399694db88feda5d1a84:ionic/components/nav/nav-controller.ts - 1199 -3 130 | af0d84c7117ab9604a8c7e3f6b9e3cf2586121c5:ionic/components/navbar/navbar.ts 6b9e59d0d05df9259b2d1701f5c91e0541a7556b:ionic/components/navbar/navbar.ts - 148 -3 131 | 9f293e85496404364c08a8275c04f52d19dacea6:src/components/toast/toast.ts 82adf6f3d36b236f12eb0b0bc1f170681f73bb24:src/components/toast/toast.ts + 95 -1 132 | 239a2d510224c3b276bb2bf004323326b98b73ee:ionic/components/badge/badge.md.scss 5e4220ae1e8c2f3db8b97db5a8ba0d374c8a1ac2:ionic/components/badge/badge.md.scss + 12 0 133 | b472c6cd43c952b59573deda53896b07c1fee00a:ionic/components/alert/alert.ts 1c618b51eb0a31013f7d3509d34c796d65689836:ionic/components/alert/alert.ts + 28 0 134 | -------------------------------------------------------------------------------- /corpus/tensorflow-human.sliders: -------------------------------------------------------------------------------- 1 | 8c413daa09318c6ad021eb830650e3c66ee90891:tensorflow/g3doc/api_docs/python/contrib.distributions.md b10e652bbaff0a1d60256a43bdf7db7a341071ab:tensorflow/g3doc/api_docs/python/contrib.distributions.md + 2585 0 2 | 979e48228936d1ffe0f0bf54680caf58f1294b50:tensorflow/core/ops/compat/ops_history.v0.pbtxt 8031e2823cdbedad42dc6ce9f4f7042f7e1c604e:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 15055 -1 3 | 94d27b6852b3e331fd9d64a0533f0fc27af05bfd:tensorflow/g3doc/api_docs/python/functions_and_classes/tf.train.Server.md ceb04a1b806563615d68d4617822f057405b3bfb:tensorflow/g3doc/api_docs/python/functions_and_classes/tf.train.Server.md + 108 0 4 | 674e389fdf6611ee4a7bb0a9d562d8bf855c0ccc:tensorflow/core/ops/compat/ops_history.v0.pbtxt b069a24b93a3354d35395b0c2ba3f3daec44f384:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 1829 -1 5 | edf3586caf997d94175a21b5561dbcfaaf9de9ac:tensorflow/core/kernels/BUILD 4671953808f87daa6c8355bdd961242290aab80f:tensorflow/core/kernels/BUILD - 219 -1 6 | b0aa789423270adfe58496a78cbfd1509f2374f0:tensorflow/g3doc/api_docs/python/io_ops.md 4be49d4d8a91a071d01eeba28ab543782a746d26:tensorflow/g3doc/api_docs/python/io_ops.md + 1573 -2 0 7 | c1a40c7b9085719cb120ae92f991f86d0757af7e:tensorflow/core/ops/ops.pbtxt 2b9c6e933098b5bff0f379e5f8c3951b588c7a44:tensorflow/core/ops/ops.pbtxt + 4668 -1 8 | f1bccd320a742c67245ded0cbe5eba971294d769:tensorflow/core/ops/compat/ops_history.v0.pbtxt 4c85a08666796faad743a47b63d350132d5c0c90:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 8747 -1 9 | 6edf3eec9bf32c0957fba0649130d16bee06dab4:tensorflow/g3doc/api_docs/python/contrib.bayesflow.stochastic_graph.md 8430dbec3f160cb496a41ee29438256b59dca2bf:tensorflow/g3doc/api_docs/python/contrib.bayesflow.stochastic_graph.md + 205 -2 0 10 | bc624aa8d9460dca794fde6d5534f1d3e8054016:tensorflow/core/ops/ops.pbtxt 0a21a38d4ef5b66177f407f74f14dd7b72232b36:tensorflow/core/ops/ops.pbtxt + 7678 -1 11 | ab30c2d368ecd7fc691de15a1a8b242ad59bc2af:tensorflow/core/ops/compat/ops_history.v0.pbtxt 0b9cb6c8dd7c01ad89b5f4e20aeed8fa2eafdd99:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 10934 -1 12 | 4b935e00c584579dad18c41167f89a0e2e9e5f6f:tensorflow/g3doc/api_docs/python/functions_and_classes/shard3/tf.contrib.distributions.Gamma.md 7ecbe480858bbf64e0a8a7cbfbf938d2c610ff6f:tensorflow/g3doc/api_docs/python/functions_and_classes/shard3/tf.contrib.distributions.Gamma.md + 182 -2 0 13 | cf3bc09caffe50a538682928aaa716dfc4b08930:tensorflow/g3doc/api_docs/python/functions_and_classes/shard2/tf.contrib.learn.BaseEstimator.md 7f4ab1e341698075fd692d24b7ebe3e32f70e00b:tensorflow/g3doc/api_docs/python/functions_and_classes/shard2/tf.contrib.learn.BaseEstimator.md + 98 -2 0 14 | 545df470168f52a369b5f1510f26ad001f48c650:tensorflow/core/ops/ops.pbtxt e67225e24a42b0e60ed3724f6e100590a3327c31:tensorflow/core/ops/ops.pbtxt + 6727 -1 15 | 30dccdb2a6a0af9c28bcb693804835a507c6ac97:tensorflow/g3doc/api_docs/python/contrib.learn.md 3a720e45238190a9c4e5fcc69c3777edc6aeefcb:tensorflow/g3doc/api_docs/python/contrib.learn.md + 3124 -2 0 16 | f6b03d61dfdfc6f2a6a3c8b2f57fbf899d83be58:tensorflow/g3doc/api_docs/python/contrib.learn.md 99e7181043c08c2dc9a4d6e8c422944100881a84:tensorflow/g3doc/api_docs/python/contrib.learn.md + 1063 -2 0 17 | ded14ab7e10349a55ad365df70b25582202e6873:tensorflow/core/ops/compat/ops_history.v0.pbtxt 5a84537852ef9b164bad165c8450bde67d30df05:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 12372 -1 18 | eed87c923ead02c0e209d0b8d2e4c29baa983ffe:third_party/eigen3/unsupported/Eigen/CXX11/src/NeuralNetworks/SpatialConvolutions.h 884763c04240f533dd059a3e47a24ae465dd777a:third_party/eigen3/unsupported/Eigen/CXX11/src/NeuralNetworks/SpatialConvolutions.h + 215 -1 19 | fdfbd3af7a25410a999cbd6a0733e36ddd1ddb14:tensorflow/python/BUILD 8509f88ade3fc65f4cc530780d06100f0b1ea108:tensorflow/python/BUILD + 487 -1 20 | aafb9be5e8abedcdb263324f8d90f769e494199f:tensorflow/g3doc/api_docs/python/functions_and_classes/shard1/tf.contrib.distributions.StudentT.md f40302caddb44249c665b9a66e27a33f06167264:tensorflow/g3doc/api_docs/python/functions_and_classes/shard1/tf.contrib.distributions.StudentT.md + 264 -2 0 21 | 979e48228936d1ffe0f0bf54680caf58f1294b50:tensorflow/core/ops/ops.pbtxt 8031e2823cdbedad42dc6ce9f4f7042f7e1c604e:tensorflow/core/ops/ops.pbtxt + 41 -1 22 | 1602ac6a918aa130c14e8058c9b940792242d995:tensorflow/python/BUILD 6290ac2c25a4f4310e072cf1472afea38031bf59:tensorflow/python/BUILD + 860 -1 23 | 58a72af2bb7b1b51c92ab26edea114c33a91c9ff:tensorflow/core/ops/array_ops.cc bb3674caeb8e21e217ffe6446e816608990297bd:tensorflow/core/ops/array_ops.cc - 875 -1 24 | ff92b6b3f335ecd8bbeade1e5d8c60bdd6ea371f:tensorflow/core/ops/ops.pbtxt d27f334dc0b0aafcca08e3a252252389468d7ddc:tensorflow/core/ops/ops.pbtxt + 15084 -1 25 | d269d53c05117f9fc9f389ef52850fc9d21b00f4:tensorflow/stream_executor/stream.cc 61b12f567ad167556bf55d4375112ed262d37975:tensorflow/stream_executor/stream.cc + 282 -1 26 | f1bccd320a742c67245ded0cbe5eba971294d769:tensorflow/core/ops/compat/ops_history.v0.pbtxt 4c85a08666796faad743a47b63d350132d5c0c90:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 7598 -1 27 | bbce152b48ab4c5ac66ac87979c8db22bff0a2c8:tensorflow/g3doc/api_docs/python/train.md 586528c8f37293e3752deff56cd794c7d548eada:tensorflow/g3doc/api_docs/python/train.md + 1887 -2 0 28 | d7d1ab97e6f476a285a586d085592ac0573ff5fd:tensorflow/g3doc/api_docs/python/functions_and_classes/shard0/tf.contrib.learn.LinearRegressor.md 0af43cad69980f916fb5e9f944cc9e09c6504aa2:tensorflow/g3doc/api_docs/python/functions_and_classes/shard0/tf.contrib.learn.LinearRegressor.md - 279 -2 0 29 | eff93149a6dc8e6826898fd9f9c28c81e21c9836:tensorflow/core/ops/compat/ops_history.v0.pbtxt aafb9be5e8abedcdb263324f8d90f769e494199f:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 14617 -1 30 | e1c2ad4b5191ede7d45b815ab7032b0ff898d6e2:tensorflow/g3doc/api_docs/python/functions_and_classes/shard3/tf.contrib.distributions.DirichletMultinomial.md 445aa09103e3bb18366079e10bce9f9a08e80a79:tensorflow/g3doc/api_docs/python/functions_and_classes/shard3/tf.contrib.distributions.DirichletMultinomial.md + 201 -2 0 31 | e52cecf69fa0efa782609a6d8f9494c08ae3aa7b:tensorflow/g3doc/api_docs/python/state_ops.md 0279b3e6107d99df322afd09ca9211ccc9cbd3bf:tensorflow/g3doc/api_docs/python/state_ops.md + 416 -2 0 32 | d0dec7ccd438c29b7806baef849c78b7a95e4467:tensorflow/g3doc/api_docs/python/contrib.learn.md dea93a2a67d604c7236155b274d752b04d925561:tensorflow/g3doc/api_docs/python/contrib.learn.md + 1508 -2 0 33 | 0e12a0b0dbcf17da880402bc01d8511aa4568cda:tensorflow/python/BUILD fddaa6b035492776f761e16003685b45ee9e6c60:tensorflow/python/BUILD + 367 -1 34 | 87cabf37f326838c69d2cf196c123851f32f0ffd:tensorflow/tensorboard/components/tf-graph-common/lib/common.ts 5aa3965ba44cd9a0da68022d00c1a5de3425c875:tensorflow/tensorboard/components/tf-graph-common/lib/common.ts + 107 -1 35 | 6ac44c7123f53e2ba5af8987bbd959de5704044b:tensorflow/g3doc/api_docs/python/image.md 785fa7a3d8c2b06f2336077bdc26fae4200db4bc:tensorflow/g3doc/api_docs/python/image.md - 1237 0 36 | d0dec7ccd438c29b7806baef849c78b7a95e4467:tensorflow/g3doc/api_docs/python/functions_and_classes/shard9/tf.contrib.learn.DNNRegressor.md dea93a2a67d604c7236155b274d752b04d925561:tensorflow/g3doc/api_docs/python/functions_and_classes/shard9/tf.contrib.learn.DNNRegressor.md + 320 0 37 | aafb9be5e8abedcdb263324f8d90f769e494199f:tensorflow/g3doc/api_docs/python/contrib.distributions.md f40302caddb44249c665b9a66e27a33f06167264:tensorflow/g3doc/api_docs/python/contrib.distributions.md + 1108 -2 0 38 | a2d856c20551861c40662859726c687bc7e8d7ac:tensorflow/core/ops/compat/ops_history.v0.pbtxt 8c972763fe5cc2330d997c016303e510b7d0c707:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 24944 -1 39 | 3aae89809f54562174b9e9d725bc28599dc1f33c:tensorflow/tensorboard/backend/BUILD 8e677731f07bc457c3e4278f4b865d6edcd6a678:tensorflow/tensorboard/backend/BUILD - 44 -1 40 | 0249729a26b2cd3bdbbc5880f8d634a56860b0fd:tensorflow/tools/ci_build/builds/pip.sh 3b49611933c109b6f589e19ab5827aa586587318:tensorflow/tools/ci_build/builds/pip.sh + 31 0 41 | c1a40c7b9085719cb120ae92f991f86d0757af7e:tensorflow/core/ops/compat/ops_history.v0.pbtxt 2b9c6e933098b5bff0f379e5f8c3951b588c7a44:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 5642 -1 42 | 4b935e00c584579dad18c41167f89a0e2e9e5f6f:tensorflow/g3doc/api_docs/python/functions_and_classes/shard2/tf.contrib.distributions.Categorical.md 7ecbe480858bbf64e0a8a7cbfbf938d2c610ff6f:tensorflow/g3doc/api_docs/python/functions_and_classes/shard2/tf.contrib.distributions.Categorical.md + 83 -2 0 43 | fdc6752cda33e8d5879e4db68093eca7d7395988:tensorflow/core/ops/compat/ops_history.v0.pbtxt 9a4878cc17d4039939e8df5a2a984cca8028baeb:tensorflow/core/ops/compat/ops_history.v0.pbtxt - 501 -1 44 | 6a365818d427f1778b1154a0507a963a3e8f8b58:tensorflow/g3doc/api_docs/python/client.md 4409db7877a0aff98bf34af80b8626ed2e47a6e5:tensorflow/g3doc/api_docs/python/client.md + 262 -2 0 45 | 8c413daa09318c6ad021eb830650e3c66ee90891:tensorflow/g3doc/api_docs/python/contrib.distributions.md b10e652bbaff0a1d60256a43bdf7db7a341071ab:tensorflow/g3doc/api_docs/python/contrib.distributions.md + 3776 -2 0 46 | 6ea8a70bd776fd1914a3517364a5e7c08f825096:tensorflow/g3doc/api_docs/python/functions_and_classes/shard3/tf.contrib.distributions.OperatorPDBase.md a64d708b858cecf9b847525d2b9f60e06db3ec00:tensorflow/g3doc/api_docs/python/functions_and_classes/shard3/tf.contrib.distributions.OperatorPDBase.md + 395 -2 0 47 | 3972c791b9f4d9a61b9ad6399b481df396f359ff:tensorflow/core/kernels/cwise_ops_common.h 795f35da2d458cbae477ac2fe2bff80c1427a771:tensorflow/core/kernels/cwise_ops_common.h + 382 0 48 | 31e84299816f332a2db4ab19f52390599e542e12:tensorflow/core/ops/compat/ops_history.v0.pbtxt 784778e76d3f5fd75b9ec99138770795907f1616:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 5828 -1 49 | bbb640b2d454123c428704fd68ed311f5def58d1:tensorflow/g3doc/api_docs/python/functions_and_classes/shard4/tf.contrib.bayesflow.stochastic_graph.SampleValue.md 69232a160116cc804f456b672fa02b215a07e38f:tensorflow/g3doc/api_docs/python/functions_and_classes/shard4/tf.contrib.bayesflow.stochastic_graph.SampleValue.md + 33 -2 0 50 | a0d21ec39cc3f18781d2d37798aa328e12f92844:tensorflow/core/ops/compat/ops_history.v0.pbtxt 3ae663ccc5d08976e0f547d5b2ece35067a6673e:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 2908 -1 51 | cf3bc09caffe50a538682928aaa716dfc4b08930:tensorflow/g3doc/api_docs/python/functions_and_classes/shard4/tf.contrib.learn.TensorFlowRNNRegressor.md 7f4ab1e341698075fd692d24b7ebe3e32f70e00b:tensorflow/g3doc/api_docs/python/functions_and_classes/shard4/tf.contrib.learn.TensorFlowRNNRegressor.md + 155 -2 0 52 | ed5cf5b92611cd5ee60ff97ba9186eb5b211e2c5:tensorflow/core/ops/compat/ops_history.v0.pbtxt a43f7b4d06fe4c96668451a720e7761d8d6ba82a:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 5466 -1 53 | a2d856c20551861c40662859726c687bc7e8d7ac:tensorflow/core/ops/compat/ops_history.v0.pbtxt 8c972763fe5cc2330d997c016303e510b7d0c707:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 24869 -1 54 | 5e2019571a0c09bd627dd4f0abbf6b08e19a65e5:tensorflow/g3doc/api_docs/python/contrib.graph_editor.md ce43d9b319c3e2d789447dfff465ca4e3cd67a32:tensorflow/g3doc/api_docs/python/contrib.graph_editor.md + 107 0 55 | 8c413daa09318c6ad021eb830650e3c66ee90891:tensorflow/g3doc/api_docs/python/functions_and_classes/shard0/tf.contrib.distributions.Bernoulli.md b10e652bbaff0a1d60256a43bdf7db7a341071ab:tensorflow/g3doc/api_docs/python/functions_and_classes/shard0/tf.contrib.distributions.Bernoulli.md - 316 -2 0 56 | 536e7caf86f3dd70518f6d45c2ab7ed19747c0c1:tensorflow/core/ops/compat/ops_history.v0.pbtxt 9bedadceab3e126684494e6e6a8103ccab9d90c7:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 2937 -1 57 | fbad3029807ccfd1048dc2fcd0d66c81f1b0b181:bower.BUILD f76c72ad4852bcf7059ffdf8e66ffa1ee526d483:bower.BUILD + 536 -1 58 | d8c888d23f27a6072fe7e87da95ce8ea51bef3a0:tensorflow/g3doc/api_docs/python/contrib.learn.md 5c8be711f7eacfa2a940158effaa3bf4b060bedb:tensorflow/g3doc/api_docs/python/contrib.learn.md - 2242 -2 0 59 | f7a0b752131dc145191521730779e096864efc1d:tensorflow/core/ops/compat/ops_history.v0.pbtxt 13ab7ff23f645157db978122baf5f4ca0af25ca8:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 2898 -1 60 | 9ca686593a3e0c69669c3f0d7f75c466d3041904:tensorflow/tensorboard/components/tf-storage/storage.ts 0c70f5b2504f2e0e180d64c64ca871102d1ddd7e:tensorflow/tensorboard/components/tf-storage/storage.ts + 103 -1 61 | ec490db88a1b624157f24a61dee0bd7d3c2630de:tensorflow/core/public/session.h e28c1dbab3506d536ded7f1b1f0a527d4cad1b14:tensorflow/core/public/session.h + 59 0 62 | cf3bc09caffe50a538682928aaa716dfc4b08930:tensorflow/g3doc/api_docs/python/functions_and_classes/shard3/tf.contrib.learn.Estimator.md 7f4ab1e341698075fd692d24b7ebe3e32f70e00b:tensorflow/g3doc/api_docs/python/functions_and_classes/shard3/tf.contrib.learn.Estimator.md + 104 -2 0 63 | 31fd4868711f393bec74200231c2936bf3df079a:tensorflow/core/ops/compat/ops_history.v0.pbtxt 8d8baf78b608dac7bccee26ef579e9a36ccd0647:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 17961 -1 64 | 6ea8a70bd776fd1914a3517364a5e7c08f825096:tensorflow/g3doc/api_docs/python/contrib.distributions.md a64d708b858cecf9b847525d2b9f60e06db3ec00:tensorflow/g3doc/api_docs/python/contrib.distributions.md + 5534 -2 0 65 | 8c413daa09318c6ad021eb830650e3c66ee90891:tensorflow/g3doc/api_docs/python/functions_and_classes/shard3/tf.contrib.distributions.Gamma.md b10e652bbaff0a1d60256a43bdf7db7a341071ab:tensorflow/g3doc/api_docs/python/functions_and_classes/shard3/tf.contrib.distributions.Gamma.md - 383 -2 0 66 | a0d21ec39cc3f18781d2d37798aa328e12f92844:tensorflow/core/ops/compat/ops_history.v0.pbtxt 3ae663ccc5d08976e0f547d5b2ece35067a6673e:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 12682 0 67 | bd939f92c85b10867d3f4d17e8b2e31f21daedca:tensorflow/core/ops/array_ops.cc adc6a4b1463b5bbfceede319b4dd7985947ffefb:tensorflow/core/ops/array_ops.cc + 176 -1 68 | 208350a6092f9faa473daf8b6eb6a80e9f9518f1:tensorflow/tensorboard/dist/tf-tensorboard.html 1c579361cd1e088dd5e05a394b1561a73e3667ba:tensorflow/tensorboard/dist/tf-tensorboard.html + 1625 -1 69 | 42d705408beb0d7a45798fa22df5684296716a38:tensorflow/core/framework/node_def_util.h 409c68eb2531f450680233c437b219237b0609e2:tensorflow/core/framework/node_def_util.h + 97 -1 70 | 8943617dc9547ea13e4c6906ee070abe49faa13b:tensorflow/core/ops/compat/ops_history.v0.pbtxt 3f19ed561ab01978cfc9dc18b04b3e3b35c2a04f:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 12233 -1 71 | 3daf61b1cd02256aaa031cc34d883f2c0133b3ee:tensorflow/core/ops/compat/ops_history.v0.pbtxt c484f058d858f4162ef8eb2a935ddd688097bf28:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 25201 -1 72 | b178a08a1ab4a98cd5a95a6bd50ba4c5c5cd5c33:tensorflow/g3doc/api_docs/python/contrib.learn.monitors.md 98698c5f451507157cf9b65d920d2515b0b39c31:tensorflow/g3doc/api_docs/python/contrib.learn.monitors.md + 1015 -2 0 73 | 4a2cfea13d285cbfd5d0c5ae3e6c17fbce8b1127:tensorflow/core/ops/ops.pbtxt 09acc7912d22a23f609778f16b94da89bd3b94d3:tensorflow/core/ops/ops.pbtxt + 8484 -1 74 | 5b5ff3f57264d19538e9d7c0bc862429a557f547:tensorflow/core/ops/compat/ops_history.v0.pbtxt 3f2e192631fe909cc316f4453f9bf5820d3e7580:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 11562 -1 75 | d0dec7ccd438c29b7806baef849c78b7a95e4467:tensorflow/g3doc/api_docs/python/contrib.learn.md dea93a2a67d604c7236155b274d752b04d925561:tensorflow/g3doc/api_docs/python/contrib.learn.md + 4018 -2 0 76 | cfcf3d6066a41c61d6cf73b328af5099034cbe86:tensorflow/python/framework/dtypes.py 9f7fc90713cefb2c45467b0b0e487e2003e9001d:tensorflow/python/framework/dtypes.py + 150 -1 77 | cc7f05f62659c2582f561ea080d01c8a93070f4e:tensorflow/core/ops/ops.pbtxt beea3019aaf19ae635181137b4fda495cd1eb342:tensorflow/core/ops/ops.pbtxt + 5510 -1 78 | ce9f3044615af06b841407bdfe4aa5e8894ebaa8:tensorflow/core/ops/compat/ops_history.v0.pbtxt dac77d49dbef14ede5310cce6ba70e2abc6d77fd:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 6774 -1 79 | 43b89c901621d8db4a534e32069e5efcb7d0d912:tensorflow/g3doc/api_docs/python/contrib.util.md 55be24524167c1d1879dba64b492c33c82244d1f:tensorflow/g3doc/api_docs/python/contrib.util.md + 86 0 80 | cf3bc09caffe50a538682928aaa716dfc4b08930:tensorflow/g3doc/api_docs/python/contrib.learn.md 7f4ab1e341698075fd692d24b7ebe3e32f70e00b:tensorflow/g3doc/api_docs/python/contrib.learn.md + 3277 -2 0 81 | 6714c150df0a764b29acf8d23981162dd2f0a9a1:tensorflow/core/ops/compat/ops_history.v0.pbtxt 35eaa24772e69e8dfddd284300851699e12f46ab:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 7333 -1 82 | 495055cb078827606ef9b29a7088629bac8b6a4c:tensorflow/g3doc/api_docs/python/functions_and_classes/tf.contrib.distributions.ContinuousDistribution.md 3ebcb955be90d9c42ad94bd22006f197ad980430:tensorflow/g3doc/api_docs/python/functions_and_classes/tf.contrib.distributions.ContinuousDistribution.md + 94 -2 0 83 | 3f1941853f8703cbf1005c04f76f75bc609fcfc9:tensorflow/g3doc/api_docs/python/contrib.learn.md fdf8f5e4cf2edff07bdac94d68aa257629fff513:tensorflow/g3doc/api_docs/python/contrib.learn.md + 2458 -2 0 84 | 9738a22673d7215b4b37236b96d6da0881b1eddb:tensorflow/contrib/framework/BUILD 428933513509d3c64f23ce33eb88465eca7b5d94:tensorflow/contrib/framework/BUILD + 24 -1 85 | bfb0abbedfd866b8adcccc776ef95e0a67c89d14:tensorflow/core/ops/compat/ops_history.v0.pbtxt 7a744f67e51733c4c7d13751943a3527d6f5322d:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 7690 -1 86 | aa7c2472a70a26f4e57508b788eb9791abdbaee1:tensorflow/g3doc/api_docs/python/train.md 39ad4a14d1fa2bdb975d1e4e3de470fd95f79419:tensorflow/g3doc/api_docs/python/train.md + 1206 -2 0 87 | 1bcebcc665e7e9c280be65899002fd3d5a7456a5:tensorflow/core/lib/jpeg/jpeg_mem_unittest.cc 49e337b4f163aa0a570333da7933303096ba3d29:tensorflow/core/lib/jpeg/jpeg_mem_unittest.cc - 85 0 88 | fa095c5db0ac9cfe2328a19b32ae208e58e3746a:tensorflow/core/kernels/relu_op.cc bf6b536bde7d8060c489b51fedb58968b8cbfd7c:tensorflow/core/kernels/relu_op.cc - 104 -1 89 | be6c9c0edb5112a42accac0878613f1e189bba45:tensorflow/g3doc/api_docs/python/image.md b65cd92171c06c1e593aa9a92123d16460c01333:tensorflow/g3doc/api_docs/python/image.md + 1237 0 90 | bb0190f6c26bf11f601102dfe2166a68a7833020:tensorflow/core/ops/compat/ops_history.v0.pbtxt d3aaffbd0a03c17619a5d986b8174030d797ca35:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 18317 -1 91 | ded14ab7e10349a55ad365df70b25582202e6873:tensorflow/core/ops/compat/ops_history.v0.pbtxt 5a84537852ef9b164bad165c8450bde67d30df05:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 3293 -1 92 | 7bc6f528ec97a1153c5a12f4df6c2edf119d2f8c:skflow/tests/test_nonlinear.py 92f29258496bc8acd49d653f8324a6090c178040:skflow/tests/test_nonlinear.py - 81 -1 93 | 0eab496110d7efe03d9dcac01b2922b591aa5833:tensorflow/contrib/learn/g3doc/api_docs/python/estimators.md 2f190ff993d45bf98aeb0931b90705c8f6fbb18e:tensorflow/g3doc/api_docs/python/contrib.learn.md + 2499 0 94 | 1e0ee048a52cea5cf75347857a4dabc2d29e947b:tensorflow/g3doc/api_docs/python/contrib.distributions.md 1db4fea2d7609d68df3b68c837726e0360c2dc6c:tensorflow/g3doc/api_docs/python/contrib.distributions.md + 811 -2 0 95 | e3a0d6fb61cbb1dd9864684c20e49ef3fa385bb6:tensorflow/python/BUILD 80a5a3e653f3b10e2680fe2ea9bc511e8801e273:tensorflow/python/BUILD + 1174 -1 96 | 536e7caf86f3dd70518f6d45c2ab7ed19747c0c1:tensorflow/core/ops/compat/ops_history.v0.pbtxt 9bedadceab3e126684494e6e6a8103ccab9d90c7:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 11789 -1 97 | 8943617dc9547ea13e4c6906ee070abe49faa13b:tensorflow/core/ops/compat/ops_history.v0.pbtxt 3f19ed561ab01978cfc9dc18b04b3e3b35c2a04f:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 5628 -1 98 | 5da3cc3643f610de70dc3091cfddbe27fce7498d:tensorflow/g3doc/api_docs/python/io_ops.md 9ace75c7c88f30a488ce022be03b8f6dc1c9c990:tensorflow/g3doc/api_docs/python/io_ops.md + 1573 -2 0 99 | 208350a6092f9faa473daf8b6eb6a80e9f9518f1:tensorflow/core/ops/ops.pbtxt 1c579361cd1e088dd5e05a394b1561a73e3667ba:tensorflow/core/ops/ops.pbtxt + 2416 -1 100 | 733321f6159f55474f4d7822b5a1c174d30e696d:tensorflow/core/ops/compat/ops_history.v0.pbtxt 9d03824d6740be0c043c431566c917ec0cf6cf3f:tensorflow/core/ops/compat/ops_history.v0.pbtxt - 11324 0 101 | 208350a6092f9faa473daf8b6eb6a80e9f9518f1:tensorflow/core/kernels/summary_op.cc 1c579361cd1e088dd5e05a394b1561a73e3667ba:tensorflow/core/kernels/summary_op.cc + 102 -1 102 | 8c413daa09318c6ad021eb830650e3c66ee90891:tensorflow/g3doc/api_docs/python/contrib.distributions.md b10e652bbaff0a1d60256a43bdf7db7a341071ab:tensorflow/g3doc/api_docs/python/contrib.distributions.md + 6034 -2 0 103 | 58c3f7713ca7f9b7081ac087526509fd386b3791:tensorflow/core/kernels/BUILD 7266545fdb124c0b6eae39f7081cd5827072e847:tensorflow/core/kernels/BUILD - 632 -1 104 | 03d9072728aa6fbe9fbd52da6af54a90613571b9:tensorflow/contrib/distributions/BUILD b0e39f2865216ad7da96f4658a9941d31ef3650f:tensorflow/contrib/distributions/BUILD + 73 -1 105 | 3b2309b3c5c762f9366f07bd8d183161163ddef0:tensorflow/tensorboard/dist/tf-tensorboard.html 36fbb89ca566a7296a615be1f2ae4625a13ad3c9:tensorflow/tensorboard/dist/tf-tensorboard.html + 6943 -1 106 | 2c3738db9c4df83adc1aff29f5cb0e9735dd5eac:third_party/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h 2d1163582aa689cf0780547a0fb60dacca236b62:third_party/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h + 126 -1 107 | 1c069480fc5102474d587678f72fb5762599cd49:tensorflow/core/ops/compat/ops_history.v0.pbtxt 11be20e4948051bdb210e16fd8c36fe54023d8ee:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 9294 -1 108 | d01dd5c94b908180ea01d80256c49f7208239265:tensorflow/core/ops/ops.pbtxt 0eeeced61ef55b7615690648e7c0cbdb998b54ea:tensorflow/core/ops/ops.pbtxt + 13700 -1 109 | 4355282f7a90713771b36b3a8a32b6647c5166f1:tensorflow/core/ops/ops.pbtxt 5da3cc3643f610de70dc3091cfddbe27fce7498d:tensorflow/core/ops/ops.pbtxt + 9498 -1 110 | 8031e2823cdbedad42dc6ce9f4f7042f7e1c604e:tensorflow/g3doc/api_docs/python/io_ops.md 57b6053185d696a3091f8d5145d93a14ff57a526:tensorflow/g3doc/api_docs/python/io_ops.md + 935 -2 0 111 | 06af3c8bff0da448f9e1d4b23e8278f430a0b250:tensorflow/core/kernels/conv_grad_ops.cc 1b83928b7e69dcc2071aaaee9175eebf4055bb5a:tensorflow/core/kernels/conv_grad_ops.cc - 1449 -1 112 | 4f257a2427ba0414bd7513c9b61fb835870bd3cf:tensorflow/core/ops/compat/ops_history.v0.pbtxt 9bceeaf82a34ace52cc9bc3e1755235174a09ef7:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 6310 -1 113 | f1bccd320a742c67245ded0cbe5eba971294d769:tensorflow/core/ops/compat/ops_history.v0.pbtxt 4c85a08666796faad743a47b63d350132d5c0c90:tensorflow/core/ops/compat/ops_history.v0.pbtxt + 10992 0 114 | 77a5ee5e64f26a235c4c8583f24f3af10cb1b2a8:tensorflow/core/kernels/BUILD 04ea051de751484988ba686993f9510d4742376c:tensorflow/core/kernels/BUILD + 456 -1 115 | 0cf264b75605ff45cefddd9adeb17de6967e3e74:tensorflow/core/ops/image_ops.cc 10e62dc1e008d08cd877a0f891d486daba8f6288:tensorflow/core/ops/image_ops.cc + 247 -1 116 | -------------------------------------------------------------------------------- /corpus/rust-human.sliders: -------------------------------------------------------------------------------- 1 | d07d465cf60033e35eba16b9e431471d54c712f4:src/librustc_unicode/u_str.rs 8d90d3f36871a00023cc1f313f91e351c287ca15:src/librustc_unicode/u_str.rs - 57 -1 2 | e24ae85025e40aa17915f6c604d89aefbca274bd:src/libsyntax/ext/expand.rs 9a4c669867765d42bdd13fc09eb9a32b7a667a43:src/libsyntax/ext/expand.rs - 65 0 3 | c00ec5f9c936639ec2fd9291cd484afa56aa24c8:src/rt/rust_task.cpp 94c389a25bde3f86f25e45b2a31d09bf72d8deeb:src/rt/rust_task.cpp - 125 -1 4 | 8600c1881247b2bc30cac6d51aad81a24c0d690e:src/libstd/run.rs 9b95b6d210a6491396311c83f0d12dfb4962d678:src/libstd/run.rs + 1151 0 5 | ed77fcc8a67cbff506ffaf73781e8d25d382a2f3:src/librustc_lint/builtin.rs 974dfe8e313cf70905ccb54c7b16129372a8e709:src/librustc_lint/builtin.rs - 1314 -1 6 | 47cd3a4ae7d82775b74f8199139a020323375c06:src/libcollections/string.rs 072dd6fabdacdbcd672c367af8ea3e721ea15d10:src/libcollections/string.rs + 760 0 7 | 9c772cd391034ad29a444e748708df5a0bfff0a2:src/liblog/directive.rs 81241dce8036c6e84e5640c179f53bf8cfc038a6:src/liblog/directive.rs + 125 -1 8 | ae2968d10a87b0f467b25ccde2e2a2eb3741e017:src/rt/rust_builtin.cpp 1dad32c015b3eecf4e8f5dc4518eec2fd019def2:src/rt/rust_builtin.cpp - 478 -1 9 | d019a49ac86322703e1daad0ebca393856185b32:src/libstd/io/buffered.rs ad44a7fbc0a0baf615af22c5ae9282e48fc2809c:src/libstd/io/buffered.rs - 838 0 10 | b0280ac5385433bd663e825e24f6990a816a5f40:src/librustc/middle/resolve.rs 15ba0c310a2bfe2ab69670d0d87529a29d527973:src/librustc/middle/resolve.rs - 262 -1 11 | 8efd9901b628d687d11a4d0ccc153553b38ada49:src/librustdoc/html/format.rs 44440e5c18a1dbcc9685866ffffe00c508929079:src/librustdoc/html/format.rs + 314 -1 12 | 08a5b112ed7af90e31a355e409f637997e458fbc:src/libstd/lib.rs da50f7c288b8e6856b42fd923f3479af1c94b3bf:src/libstd/lib.rs - 337 -1 13 | 11eda66df859f53754788044476af753a012332f:src/libstd/io/cursor.rs 6b244d54e6a316f6b0c13c49097454ec71f14d7e:src/libstd/io/cursor.rs + 306 -1 14 | dc9b3ff1b30c10aaf60d40fd9845d9bf69ae2c2e:src/libstd/iterator.rs 20016b92c8c03e33ad9b965fba32ac851fe9f6bf:src/libstd/iterator.rs + 1316 -1 15 | a967611d8ffececb5ed0ecf6a205b464d7a5a31e:src/libcollectionstest/str.rs b64c9d56700e2c41207166fe8709711ff02488ff:src/libcollectionstest/str.rs - 483 -1 16 | fe03caedf0d2e32c41bb1c5169fb0162c8af6b28:src/libstd/trie.rs 3395f9d6a10aa912ab88de2e8d5b4f7de407413a:src/libstd/trie.rs + 832 -1 17 | 7012c42c4155198df282ac4ebf0000cb25fa10f3:src/libcore/clone.rs d6a8343470dd40b3db4dea39041aec9e9f92a465:src/libcore/clone.rs + 154 -1 18 | 474c6e0ae47578b3e608c893e18bc83798b565aa:src/libcollections/str.rs 0335a94a6803b83f3ec91391aea5473c9846bb18:src/libcollections/str.rs + 646 0 19 | bfa9c9a00f0a301a5e936ae14c6a95e98f3bf5ee:src/libcore/hashmap.rs 42cafcee2c740c6d2a85018a947b78338d2afa8e:src/libcore/hashmap.rs + 635 -1 20 | a30d61b05a7b11bcc52c2d4988c0a5f7fedce2ff:src/README.md 72794094a17caa33cccf6a16d37c4e640f431f32:src/README.md - 40 -1 0 21 | 5ff7b283731b795930d1e6782ae1639c83595e91:src/libextra/arc.rs 06a8d59ded67dfaa589112ceb8a8e031bc575249:src/libextra/arc.rs + 553 -1 22 | 3906823765b1ec241df4906527a990ec945c4392:src/libstd/vec.rs 721609e4ae50142e631e4c9d190a6065fd3f63f7:src/libstd/vec.rs + 2331 -1 23 | 023dfb0c898d851dee6ace2f8339b73b5287136b:src/libcore/ops.rs 262c1efe6352a3e4dba4d8aebc4d9bd96849cd71:src/libcore/ops.rs - 414 -8 0 24 | 69186efc199d48afca9427e448363212b0a59454:src/librustc/middle/typeck/collect.rs 23d95f6dc63c42f8fec60bd60588a20a254fa4d7:src/librustc/middle/typeck/collect.rs + 259 0 25 | 4467d7683dae87d6d4c55e446910f7a5b85abd13:src/boot/util/common.ml 0830b5bf24a7117130e0089754cd96e51411284d:src/boot/util/common.ml + 378 -1 26 | 0d74d22eda5f9bcf88103853b614664750538897:src/rt/rust_shape.cpp e5533a5d5e589bad751e4af3f29dc4c65cb8958e:src/rt/rust_shape.cpp + 959 -2 27 | 7a05f1db7cb85ead062d6a7dde566f6e3010f2f2:src/rt/rust_upcall.cpp 5a673cc2c9d1a85efb967c47e40cb805ba691b90:src/rt/rust_upcall.cpp + 109 -1 28 | 1b28ffa5216c845d1cef6b0cb3e5ac7db12025d0:src/libcore/ops.rs 218eb1277d95090c7db5ba0242194b497784d04e:src/libcore/ops.rs + 375 0 29 | fbfbdd7d1426d34b94223909eec2c9c009d9c731:src/librustc/middle/infer/mod.rs ed3fbba797b0a68b797469f49f878307cc64c993:src/librustc/middle/infer/mod.rs + 660 0 30 | 14192d6df5cc714e5c9a3ca70b08f2514d977be2:src/libstd/num/f32.rs 232424d9952700682373ccf2d578109f401ff023:src/libstd/num/f32.rs + 619 -1 0 31 | 6741241f4046aea4014b1a23618593fb481c8606:src/libstd/path2/windows.rs 73d3d00ec437f87ac665b4e4da3bedec8ce4f9ef:src/libstd/path/windows.rs + 1770 -1 32 | 19adece68b00bd1873499cca6f1537750608d769:src/librustc/lib/llvm.rs 541c657a738006d78171aa261125a6a46f283b35:src/librustc/lib/llvm.rs + 242 -1 33 | 749625ad6d15d0254b90e3d16f79d1cb1e260969:src/libcore/iter.rs b0ca03923359afc8df92a802b7cc1476a72fb2d0:src/libcore/iter.rs + 2103 0 34 | 47cd3a4ae7d82775b74f8199139a020323375c06:src/libcollections/string.rs 072dd6fabdacdbcd672c367af8ea3e721ea15d10:src/libcollections/string.rs + 914 0 35 | d528aa9960cb9b937d8ef6c09905a6a8076d5f3a:src/libstd/fs.rs 187355178b9fe578846a41972e3ae0f3760cf2ee:src/libstd/fs.rs + 858 0 36 | e0a6e2b41421928206cc71be27da1239b4598ed1:src/libserialize/base64.rs 56218f5dfc3677be77bb52c0d298da2b12de99d3:src/libserialize/base64.rs + 319 -1 37 | 06087e67e166512a623f584bfb52a17dfb974b51:src/comp/back/rpath.rs e4068f67153807f4c2554600bc60d2b3699ce682:src/comp/back/rpath.rs + 314 -1 38 | 44697a4293ae083e57b49cc2afe6cf7fca71b10a:src/test/stdtest/comm.rs d9b23cb0224efb7157d2888bdaef85edebf6dd08:src/test/stdtest/comm.rs + 8 -1 39 | 3316a0e6b2ad9352bab58e7c046ef3d212411d82:src/libcollections/hashmap.rs 5bdbd2100946a5204ef82b12eb474e8e4d9ba64e:src/libcollections/hashmap.rs + 16 0 40 | 5ca60d94316bd56f412ef4c13292237e206babf1:src/libcore/char.rs 24b5d3afd75a6cdbaca1dc488d43b90f159108cb:src/libcore/char.rs + 199 -1 41 | 9584c60871dc712f95a2f37f24853cf3faf6191e:src/libcore/io.rs 429b8a9b9e48925fa34b02b05568e630d78c855b:src/libcore/io.rs + 1367 -1 42 | 2550243b4183783e463fbb0bc141ab77f2898e64:src/libcore/slice.rs 4f509a1e479bb971b0d6af8bc6cff6acaf97c0c7:src/libcore/slice.rs + 885 -1 43 | 9aadfc3f4b5df00a7f8e9b362385118ae1dba73e:src/libsyntax/ast.rs be93b29d304b310ec56630f5313ccddf3ae470ea:src/libsyntax/ast.rs + 1064 -2 44 | 216f6645ef0c93776e9f350f29c02780fb7bf673:src/libcore/mem.rs f758baa5243d832949a6a04f38da6d1d26b03ef1:src/libcore/mem.rs + 373 0 45 | d97be7bd70903350e75c6ae9ca41a92aa3a5e362:src/libstd/macros.rs 49b1902345468564a9da16d745cc1a5c5c650908:src/libstd/macros.rs + 71 0 46 | 42b462e0765f02fd7bb0f2613240ae2489a47fee:src/libcore/task/mod.rs 0682ad0eb9a6b268498a81b2e16a40544e44f0fa:src/libcore/task/mod.rs + 840 -1 47 | fd293dfb0f97962697a967b2fae12b54225d7a11:src/libstd/str.rs dca9ff9a13b0ca04160828413e4550225fb1e04f:src/libstd/str.rs - 2983 -1 48 | 8efd9901b628d687d11a4d0ccc153553b38ada49:src/libcoretest/fmt/num.rs 44440e5c18a1dbcc9685866ffffe00c508929079:src/libcoretest/fmt/num.rs + 241 -1 49 | fb169d5543c84e11038ba2d07b538ec88fb49ca6:src/libcoretest/ptr.rs 9d5d97b55d6487ee23b805bc1acbaa0669b82116:src/libcoretest/ptr.rs - 197 -1 50 | 96cd61ad034cc9e88ab6a7845c3480dbc1ea62f3:src/libstd/str.rs 3c23a0a836164ed3ac1b94b526ff8f4e71571e8e:src/libstd/str.rs + 2399 -1 51 | b12b4e4e3266644d519647afc2943cefa2026e07:src/libcore/result.rs ca966b68e6a6e95d975e0511a16d38e058bbe449:src/libcore/result.rs + 346 0 52 | 57b4d10ff652d3beddae64782c882a07822bac3c:src/libcore/str.rs 32baf1c54c4214f5a50da53979008ef9bcdad359:src/libcore/str.rs + 2597 -1 53 | 708b5d986e37eeb61a98b2a7f29ba02f517e7d39:src/rt/rust_uv.cpp 511873afe3e00ed776244478edfec406bdff7e75:src/rt/rust_uv.cpp + 304 -1 54 | c1de0a0f9ea9863407363ce31bb698e9988215ee:src/libcollections/str.rs a641996796f0ab11021671c0ce70a3c975bb4e37:src/libcollections/str.rs - 2897 -1 55 | a967611d8ffececb5ed0ecf6a205b464d7a5a31e:src/libcollectionstest/str.rs b64c9d56700e2c41207166fe8709711ff02488ff:src/libcollectionstest/str.rs - 768 -1 56 | 5606fc0c90461db40faeca16d7bffd9e61c2be73:src/libcore/cmp.rs 3322595e896e95c3e19ca33c854ad529f2ef3c19:src/libcore/cmp.rs + 210 -1 57 | 2d6952e54a87c18838b70c0d8ea227857ac56903:src/libstd/io/mem.rs c2c7a2497d2005f92834a2c2d6204cc7db783ec9:src/libstd/io/mem.rs + 291 -1 58 | 81a44ccacfc9da31dab6434db54ef023e9950ac2:src/rt/libuv/test/test-timer.c bdbeb75bfb868c98d528cdf131c8102c58be195b:src/rt/libuv/test/test-timer.c + 133 0 59 | eb4d39e1fef918242a5dba2a09d7b9faa437b911:src/libcore/pipes.rs 6ce74460e6a5c8045a7b43b86a656f28354f4b0c:src/libcore/pipes.rs + 477 0 60 | c7454f55959584579dc982d38c8432e84c7f8900:src/libcore/str.rs ebf14cb3a95a872e1973074ed0b915e873fddf41:src/libcore/str.rs - 1849 -1 61 | 0da49dcf1352bc038bb32c1a7bc1ac1be50d541c:src/libcore/num/f32.rs 46333d527b138e8e202380a5ce4409dfe1414148:src/libcore/num/f32.rs + 118 -1 62 | 58eeb07c2a128cbba403d6204c2f291af4ddf938:src/libextra/url.rs 4667c492b539e3abd046007f904c9395ef22310e:src/libextra/url.rs + 996 -1 63 | 43bc6fcc62e3ad92c76ea8f160a6189ac86618f2:src/libcollections/list.rs a09a4b882d415ea764f58816b963de0203c4e9f0:src/libcollections/list.rs - 57 -1 64 | 118b975c805533bab31f8155ad0af29b3635d3fc:src/libcollections/binary_heap.rs 04436fb65b7efa81793f0f89cf375d0fadf99f89:src/libcollections/binary_heap.rs + 376 0 65 | 3ee1adb7ece94da682109707cca6cd08aacb131a:src/libstd/future.rs a55ea48d2bd3b56ce6e8667e8bebc72371f17dd8:src/libstd/future.rs - 212 -1 66 | 7fbcb400f0697621ece9f9773b0f0bf1ec73e9c1:src/libstd/str.rs d8e45ea7c054b4ad6fb82ec3a9fcf1736b4d7260:src/libstd/str.rs - 2886 -1 67 | 4c79b22ef26a2b846d84c46bc8fea50c953559dd:src/libstd/vec.rs 9177f7ecb4d897a72aeaa0b3dfed930286946cf3:src/libstd/vec.rs - 3539 -2 68 | 5b2c0a999fd9d0a92c82f2615a00cd13ced7a077:src/libcore/vec.rs 29ba19633651e4c51cddf3c2c089c1c36ed531c6:src/libcore/vec.rs + 603 -1 69 | f0e98691dbf88d0fac7ae04d131e9059d0335527:src/comp/middle/trans.rs a59c4b1b47b84879edfc43e7278553105930f0e2:src/comp/middle/trans.rs + 5155 0 70 | bab7eb20dff32294c65fa28cece552481c40cf0b:src/libstd/path/posix.rs 0c7e8f7a92318d19fd9de96ba70fa36fc41de1e2:src/libstd/path/posix.rs - 698 -3 71 | e8c7b5347d3b834a2c467677cfa8670316b2c574:src/rustdoc/markdown_pass.rs 4fc5b822e218301eedf49ec249fdd1a0adf8ebd6:src/rustdoc/markdown_pass.rs - 344 -1 72 | b513a5a5001b850a153db12d9621d00a70ff929a:Makefile.in 447414f00774d37d934867f5a476cf00e1f95423:Makefile.in + 188 -1 73 | 60a748a1d8e9631df9b04235881917c0a80c9e03:src/rustdoc/text_pass.rs 487cbf8e906f73589df9501004abeb570b24f121:src/rustdoc/text_pass.rs - 118 -1 74 | 6232f958cd42960f64456566dc56ed15470761f4:src/libstd/thread/mod.rs 11c22180a790b5010140bb9712d47dd7bca7d903:src/libstd/thread/mod.rs - 88 0 75 | 8e54e74be4254ac374b5496888d14987dede0008:src/libcore/str.rs 02d84d89e029d58469f0ee9d6d7d15a894b5236f:src/libcore/str.rs + 748 -1 76 | 49ac6baa726988c7a84dff3bdc8c1f8812940224:src/libstd/task/mod.rs 517298de484b2a9c88689e8313bed5fde80acd79:src/libstd/task/mod.rs + 978 -1 77 | 0144c83213cb5ce43df61f149274379f49b6d7cb:src/libstd/task/mod.rs cb9ee7f5be0de2bb93688f8e2ef2934eb3bd7df7:src/libstd/task/mod.rs - 936 -1 78 | df90934bf749838867536fa7f8bb08a9cf216e83:src/rt/rust_upcall.cpp c750c520e3d1034274b40d8139a41a10976f2a5d:src/rt/rust_upcall.cpp - 39 -1 79 | 099b411e080d302ec0dc5f3aebe53d76c50acfc7:src/libstd/collections/hash/map.rs c05338793b39539121ce9117d1b341d6529948ba:src/libstd/collections/hash/map.rs + 2157 -1 80 | d75ab4a5d798164c37e04a0794f2e28acdb76dd4:src/libstd/str.rs e33fca9ffefffc982bbde860251f11b191457412:src/libstd/str.rs - 2540 -1 81 | 9ca8df93b318aa4dc721a187f1216ac7f3a6671b:src/comp/middle/typeck.rs 814bf41d898cd0410873f6c05c03a2b34366bfde:src/comp/middle/typeck.rs + 1945 0 82 | 8a55cd988f272ec70fc7d5adf6e61ed8ee6a8e78:src/libstd/num/f32.rs 5973b0c4ad26729aa1379b98317479f61cd0d87c:src/libstd/num/f32.rs + 870 -1 83 | 09bfb92fdc3ccff42dfcf91b0af368f88dc3e446:src/librustc/middle/ty.rs dc7d7d2698139d9d9b0887481c4f50773daa392b:src/librustc/middle/ty.rs + 1310 -1 84 | af2086a2f1914f5e4db8534b6c0784b612f3a33d:src/libstd/iterator.rs 857d433b9a300989f373f34771218895ec59715a:src/libstd/iterator.rs + 1086 -1 85 | 1ea184285eec782f90ecf4e77c854edfb0269e1b:src/rt/rust_builtin.cpp c1b075d042cabb90f804f3d73e6a4f4b512aa697:src/rt/rust_builtin.cpp - 95 -1 86 | 21205f4f9e61469b55a853cf6be478cd6bc7a073:src/libsyntax/ast.rs ba43c228b55d9620d3d480246ee2d9295484a336:src/libsyntax/ast.rs - 940 -1 87 | 9cc0b2247509d61d6a246a5c5ad67f84b9a2d8b6:src/libcore/fmt/mod.rs 516941b74f61f058625fab936ad0fd2c97943e22:src/libcore/fmt/mod.rs + 315 0 88 | 135cac852822afe822cc1e4eb9546b96eb2cb35d:src/libcollections/btree/set.rs 429c23d5f4de5274cbcc22e72f6a2e3a00069817:src/libcollections/btree/set.rs + 155 -1 89 | 8762fc31db55c641083bf31539da3f079877c8b1:src/librustc_privacy/lib.rs 48b048deb732b31d6768876074f7bc9d0e036645:src/librustc_privacy/lib.rs - 62 -1 90 | 12e0d7ecf061313d02a4647db8c1b30aad2ae53d:src/libstd/result.rs e03d60e9ebf2dbc2d18ab9919f905c17b967fcde:src/libstd/result.rs - 487 -1 91 | f1bcfdd8e48ce9ca322e800a3641c65a9b1c1a5d:src/libstd/fs.rs 42f4dd047af2de895df2754f7222b39f10cb6205:src/libstd/fs.rs + 417 0 92 | eabc9f229574a906437dd63359caec1c15fb75ad:src/test/stdtest/int.rs 76077a9fb7f67a8af1b2eb16c2814ca703ad6c97:src/test/stdtest/int.rs + 23 -1 93 | 47cd3a4ae7d82775b74f8199139a020323375c06:src/libcollections/string.rs 072dd6fabdacdbcd672c367af8ea3e721ea15d10:src/libcollections/string.rs + 1122 0 94 | fd49f6dce11033496a87d08d66114a86b2d85d59:src/libstd/str/ascii.rs 3a3934244c53cfe3024431cec934b2e2901d50d0:src/libstd/str/ascii.rs + 524 -1 95 | 1be24f0758d3075d2e7f141f8831bb8a233ce86e:src/libcore/vec.rs 8d4928f7808813de62fefcb89139bfb7382b250b:src/libcore/vec.rs + 1348 -1 96 | d09412ab893f54ef5309cf63d17bcb6110d582b9:src/libstd/rt/uv/uvio.rs 35e844ffc1e3c022e868817ad1c548b900db800a:src/libstd/rt/uv/uvio.rs - 317 -2 97 | c7a9b49d1b5d4e520f25355f26a93dfac4ffa146:src/libcore/ops.rs 096a28607fb80c91e6e2ca64d9ef44c4e550e96c:src/libcore/ops.rs + 133 0 98 | 8694b4ffe9b223c351e50c10bd8ea4e23af58baa:src/libcore/ptr.rs 552eda70d33cead1398adfecce1a75e7a61e3daf:src/libcore/ptr.rs + 340 0 99 | c7bdfd4442f0bde3412f08336f75b9eabff4a938:src/librustc_unicode/char.rs 48d5fe9ec560b53b1f5069219b0d62015e1de5ba:src/librustc_unicode/char.rs - 460 0 100 | edf2198f5fdc4488b354824f6d6947353ae80bcc:src/libcollections/str.rs 7b30f5c2563a27e45593aa72b7f34ee49f62144f:src/libcollections/str.rs + 693 0 101 | 39d164d0421a7560ea1e35a2347fda223cd43f6e:src/libsyntax/diagnostics/macros.rs 75ee8f156204cef3140d6e153d36f9970ca2bfa1:src/libsyntax/diagnostics/macros.rs + 34 -1 102 | aac91267e3ea650649ee443b042fe04cd502da6c:src/libstd/smallintmap.rs 9ba7114515db355ca36065d2730e3ee6c84cd6d1:src/libstd/smallintmap.rs + 196 -1 103 | 06d14f3a1cef79977da60c392b1c52d4ab87e2c7:src/rt/libuv/test/test-fs.c fdeb5ba3043bbd173bd5b7308e98dde723f66d5c:src/rt/libuv/test/test-fs.c + 1411 0 104 | 7d8100a068151512774caf15a6a88766ca9cf434:src/libsyntax/errors/snippet/test.rs f030b5dbc29b20b964f2cc448d893998080b1a46:src/libsyntax/errors/snippet/test.rs + 522 0 105 | 3d004c6df8f25e1f120279c1e9e9b1b6e38810e0:src/libstd/uv_ll.rs bf99a3aa932d32a1390ca58df403c68defc51a07:src/libstd/uv_ll.rs + 412 -3 106 | 3157691f963a86776cb7e6a7842f566032890aba:src/rustc/Cargo.lock b3de04214646a33fa5a14fbb2e8ba55e7ee5a707:src/rustc/Cargo.lock - 11 -1 107 | 7ff10209aa9b8da6d6d4ceea0161757048126d2d:src/libcoretest/num/flt2dec/bignum.rs 7ebd7f3b9a7ebc020663a13b29b1e50446b3c262:src/libcoretest/num/flt2dec/bignum.rs + 118 -1 108 | 5dd1583c57fbee9a07ac1111858871c241a24c50:src/libstd/rt/crate_map.rs 201cab84e8f12ec73131ac4908e6779b277449a2:src/libstd/rt/crate_map.rs + 52 0 109 | 47cd3a4ae7d82775b74f8199139a020323375c06:src/libcollections/string.rs 072dd6fabdacdbcd672c367af8ea3e721ea15d10:src/libcollections/string.rs + 733 0 110 | 0ac6e5afda2a9741d50d6b5c557ee16fee44878f:src/libstd/comm/mod.rs 47ef20014c32443b12a122c0371a87f513830807:src/libstd/comm/mod.rs - 277 -1 111 | 11a307294a83c2651405137763c9d620ab3fc7e7:src/librustc/middle/typeck/infer/mod.rs 2b92962aa29b0116015f99c1666ecf6288303c65:src/librustc/middle/typeck/infer/mod.rs - 349 -1 112 | 35b1b62ddfc31c2e52b65c2f908c0fcbc6465de5:src/libstd/str.rs 4f841ee1509fafdf688a3898e01560ae29ee7836:src/libstd/str.rs + 3849 -1 113 | 1cfa6569f9078090ac317af432adf712407bd4f7:src/libcollections/ringbuf.rs 63615778089545588ed15b7467bb3cca1c05c3a7:src/libcollections/ringbuf.rs + 951 -1 114 | 76fc9be5a1634c8b7ebf766f51ad594d9012fe9c:src/libstd/str.rs 0cfc08d81e7cc664330ce9d38a874c14a4ae51bf:src/libstd/str.rs + 2284 -1 115 | ba173d84098024d43628a250b0024ffe83b48558:src/rustdoc/extract.rs fdea1c414ce356a61bc70525ed96746fa25c4330:src/rustdoc/extract.rs + 367 -1 116 | 277334890dabd85c1015da666e2700dfe9950e2d:src/comp/middle/fold.rs f951b52e91c5c0487ad4d3a5454b193f15146d6a:src/comp/middle/fold.rs + 164 -1 117 | adcda460115b1f491a7624752901b7410591dfc5:src/libstd/sys/windows/c.rs d2f990f2b0a5a6bdc0834ab8e8ea17bb5212efee:src/libstd/sys/windows/c.rs + 87 -1 118 | 5dd1583c57fbee9a07ac1111858871c241a24c50:Makefile.in 201cab84e8f12ec73131ac4908e6779b277449a2:Makefile.in + 296 -1 119 | edeb4f1c86cbf6af8ef9874d4b3af50f721ea1b8:src/libstd/fs.rs 6b9b2ee8781ddb3dea00ba156bd3b5b0638c6f43:src/libstd/fs.rs + 2087 -1 120 | 9316ae515e2f8f3f497fb4f1559910c1eef2433d:src/libcollectionstest/string.rs 6ac83de691c5eb180e2007fcbe3236fd359d2ab7:src/libcollectionstest/string.rs + 196 -1 121 | d7cfc34a222c0280670690be0d618b67014cc28d:src/doc/guide.md 1a80dcbd56e9b7f81b7d3aa4c3809ed1859fdcf7:src/doc/guide.md - 1887 0 122 | 5ae06ae9dea2f1dac157193b702f640e2216a5a9:src/libcore/vec.rs d60747a24839c50165b0e2ea35592a7cb008f69b:src/libcore/vec.rs - 3321 -1 123 | 72fdb1a3bfcf1017a14cb606c8c145bf3355e2db:src/rt/rust_shape.cpp f4f057ced1f4152575571a6e5116e1ad5bb38beb:src/rt/rust_shape.cpp + 945 -1 124 | 140fbd301962991afac2358e445b48b4f647ca43:src/rustdoc/rustdoc.rs 555d5aed37bc62d3c4f953668c324505ed72e6f9:src/rustdoc/rustdoc.rs - 165 -1 125 | 2a7c5e0b724d8318a7e7762e483c225e8a7420a1:src/libstd/io/net/unix.rs f9a32cdabc1680b89bd7b579dc1e3f8f18c28257:src/libstd/io/net/unix.rs - 89 0 126 | 253a1cefd8a9db926ca2d983dde5234504c86b4b:src/libsyntax/diagnostics/macros.rs 95dc7efad0df3640096a48a84c1d7a29044be750:src/libsyntax/diagnostics/macros.rs + 34 -1 127 | b01d2babaf29b2798fa624676a1c9fcbcbc1e30a:src/libstd/arc.rs 78d5091a4f09f0f7c613437e502db95b63a0c538:src/libstd/arc.rs - 588 -1 128 | a967611d8ffececb5ed0ecf6a205b464d7a5a31e:src/libcore/str/mod.rs b64c9d56700e2c41207166fe8709711ff02488ff:src/libcore/str/mod.rs - 2044 -1 129 | 3d81f785441799edfbd005304a7ff56089a258c6:src/librustc/middle/astencode.rs 2b4f28e531b7fa9ad6dd3cd14cd953a7bbf8b326:src/librustc/middle/astencode.rs + 1379 -1 130 | 4389ee3893c82fc2b6b33eeb5555cc1744f6da4a:src/libcollections/ring_buf.rs 865c2dba30cee0d61ca0073aaf5fd32587887674:src/libcollections/ring_buf.rs + 1353 -1 131 | fea5aa656ff4349f4d3e1fea1447d26986762ae1:src/libcollections/ring_buf.rs 8fb25ab5b0c8097d545911ab8a0de822771e1f03:src/libcollections/ring_buf.rs + 52 -1 132 | d2f41bd5be70544411e5ed42bcdb201e6ab25eb2:src/libcore/num/wrapping.rs 579420fbdd9951ae230a9def03e157d9b9957b2f:src/libcore/num/wrapping.rs + 406 -1 133 | 4c441e95d69909265e69cffd3439f890914e02b3:src/libcore/private.rs 1b1700f44b88225bc3557e1ca497644b9852e268:src/libcore/private.rs + 53 -1 134 | 24b6901b26f0bde00706a5cbc16ffc29296ea40d:src/libextra/dlist.rs fe134b9509821e5e2fad5545cdd23c5325dfd583:src/libextra/dlist.rs + 699 -1 135 | 0834bd1b3db4e9c1477871cc962459b11e298234:src/liballoc/heap.rs 2750e3c83e7cfbad779877ac213bd815c6aa65bb:src/liballoc/heap.rs + 29 0 136 | 470118f3e915cdc8f936aca0640b28a7a3d8dc6c:src/libcollections/slice.rs 7d8d06f86b48520814596bd5363d2b82bc619774:src/libcollections/slice.rs - 2134 -1 137 | ecc774f788ca3880ce76e4b87ac0d21a3a16d3ae:src/libstd/path/mod.rs 28e3340a078bfb53fd621900fb17d42d6e718526:src/libstd/path/mod.rs - 525 -1 138 | 87115fd001440652291c509a77bda74fa511dab0:src/libcore/cast.rs 1868cf50736e76add8355f5104fe4fab437e8153:src/libcore/cast.rs - 37 -1 139 | c2ca1a4b622baa8394ab19e76bef75afe680ad18:src/librustc/middle/traits/select.rs f45c0ef51e342c552021a80ddd343b0c7175111e:src/librustc/middle/traits/select.rs - 1758 -1 140 | 9c097d19e4408653e7e0c008f69af835d053b8a0:src/lib/vec.rs b5ed1c46c0407c6a6c3354d1c8da8531d992064c:src/lib/vec.rs + 659 -1 141 | fb169d5543c84e11038ba2d07b538ec88fb49ca6:src/libcollections/slice.rs 9d5d97b55d6487ee23b805bc1acbaa0669b82116:src/libcollections/slice.rs - 1693 -1 142 | 86fbdbfbcd4c019fda26ff73b9e1e30ed7a8b174:src/libstd/sync/poison.rs 08246520c0fef902b169233e26e15cf58ef1cd8b:src/libstd/sync/poison.rs + 94 -1 143 | 42357d772b8a3a1ce4395deeac0a5cf1f66e951d:src/libcollections/str.rs 9e59c7626381eff9ee9110091b68a079b8a5b7d8:src/libcollections/str.rs + 1615 -1 144 | c06dd0e0afb4b78ab4e482a7488adcf1c865bd19:src/librustpkg/conditions.rs 1755408d1a58684b6c9bce11aeceb18a1ec2d66e:src/librustpkg/conditions.rs - 35 -1 145 | b497f050081886803682adc081ddb1e8c4a59a57:src/libcoretest/tuple.rs 3a073e3127363c6b553eda83e0803353f2a95777:src/libcoretest/tuple.rs - 19 -1 146 | fb172b676e5ab951e58b98cede795ab1a7557a58:src/libstd/fs.rs d47036cbd1e181da6eca7f4f125e092bedeb35e0:src/libstd/fs.rs + 1892 -1 147 | 6741241f4046aea4014b1a23618593fb481c8606:src/libstd/os.rs 73d3d00ec437f87ac665b4e4da3bedec8ce4f9ef:src/libstd/os.rs - 1899 -1 148 | ac0e84522437331f9a06d04a5842acf0234cc86e:src/libcore/iter.rs 464cdff102993ff1900eebbf65209e0a3c0be0d5:src/libcore/iter.rs + 1920 -1 149 | 49fcb27df63b845c42d4883c47d2cfc512edeb78:src/libgreen/sched.rs 60b859ab8ac8c48b7adbefe81d0e5d3c772b080a:src/libgreen/sched.rs - 1281 -1 150 | 5a24ee8a9ef1bb3bf250ce39902cf8dfca1a4dea:src/test/run-pass/intrinsic-alignment.rs cb55279f2378c8f3e8528c8c4c8a0f67d6955cb1:src/test/run-pass/intrinsic-alignment.rs + 54 0 151 | 4ad0b8ac585487b6f29dd6d97bcfb7a1742f1eb1:src/librustc/lib/llvm.rs faf1afee16cfacf0318ca2b88bc4fa5e507418dd:src/librustc/lib/llvm.rs + 1685 -1 152 | 24b42234185427c5141b03103d8ce640538ba500:src/librustuv/process.rs ceab326e82dfba2f3cd513926c023dea1af4b1c2:src/librustuv/process.rs - 39 0 153 | 1efb668aaab923434b5b406b78afe5f6c0852ac7:src/test/run-make/dep-info/Makefile 405861ed0a87ca67e34882d8c444c4cb2f34ab7c:src/test/run-make/dep-info/Makefile + 24 0 154 | e1fc7d5f0126e4c213cac589bf301814e0327b9e:src/rt/rust_shape.h 11a5d10bf2958c642ae6a7c4afff8e181aa2167d:src/rt/rust_shape.h + 515 -2 155 | 883c966d5c6ba93bf8834543500b01f644ab362f:src/libstd/vec.rs 06bec77fafb1c30052b9c69a3fb17b2835cb608f:src/libstd/vec.rs - 3844 -3 156 | 00f591680983cc19a6d9f24d8f8c0026ccf20398:src/librustc/rustc.rc 98ba91f81bea38d8fc8bd5bc0cb44ac3e173a53c:src/librustc/rustc.rc - 39 -1 157 | d9c06586f2aa12f89c94a27a20f0d0b260da216e:src/libstd/ascii.rs f8cc9a9cb1e221abb0cbf2e169b10c826f3fbd98:src/libstd/ascii.rs - 150 -1 158 | 8fe6fc11de4d6bfbffd8b961f5f1f24a338601d5:src/libstd/num/strconv.rs d3155faedee97cb916735573fbf067d6305ee730:src/libstd/num/strconv.rs + 113 -1 159 | f1f0e6c06c9a208bbcbe48292b7a0ee31edbb114:src/test/stdtest/vec.rs 7a7940daca560d4471f5afa901579e1bd65dcaa6:src/test/stdtest/vec.rs + 320 -1 160 | 20b3313c8c14a8f7ee29215734b26f79b4f2b2a4:src/libserialize/json.rs 1028120c40018763de11a81d0bf9bc981622d0ae:src/libserialize/json.rs + 3211 -1 161 | 8efd9901b628d687d11a4d0ccc153553b38ada49:src/librustdoc/html/format.rs 44440e5c18a1dbcc9685866ffffe00c508929079:src/librustdoc/html/format.rs + 197 -1 162 | fb169d5543c84e11038ba2d07b538ec88fb49ca6:src/libcore/slice.rs 9d5d97b55d6487ee23b805bc1acbaa0669b82116:src/libcore/slice.rs - 1103 -3 163 | ed22606c8382822efc555f72f895c560289a5c70:src/librbml/lib.rs 0cb7a4062a3c69bb0c54f0c9136889a1006e4f62:src/librbml/lib.rs + 675 0 164 | 2b362768ff3cab2c966f1f18cf119b21fc96ea30:src/libcollections/list.rs 52524bfe880f3722d8d70e4433429c1b4a3f31d3:src/libcollections/list.rs + 221 -1 165 | 836d4b96a91cd6a36228d757004655e26e3f2c46:src/libstd/lib.rs 5b75e44fb01f0eda10ce8d8df92b80945d894768:src/libstd/lib.rs - 258 -1 166 | f1ea540e9024db9b5d2e6a6e92431875feb345b3:src/libstd/io/mem.rs 90fe1a632bd38633006ea53f92a1da14944fd835:src/libstd/io/mem.rs + 626 -1 167 | 1310212c27c1c294e1f907b05a225440c987a912:src/librustc/lib/llvm.rs 779191cd4b8719e8efdf69fb6da93e2a8905ca1d:src/librustc/lib/llvm.rs - 1042 -1 168 | 0685900fbd1ea1f6be5c3454dcde753ac3484c01:src/librustc_unicode/char.rs 68efea08fa1cf800b3b76683992ec77a89323d53:src/librustc_unicode/char.rs + 272 -2 169 | 2c51e262f367f0f079135a5a176706ea5ef78f78:src/libsyntax/ext/base.rs b9bb4abcb66804e4b78704068703f0dab5c72887:src/libsyntax/ext/base.rs + 55 -2 170 | 593bdd9be3959f166c303e3da0678cc9598bffc4:src/libcore/num/float.rs 03932f0b84e94f0ef96e4a6de6cb16ab436311e4:src/libcore/num/float.rs + 519 -1 171 | 4f2ab2bf4663034fcd0395afd274a9b3a4681776:mk/install.mk 8b3c67690c4747b9fadfef407e6261524fb03f8a:mk/install.mk + 40 0 172 | --------------------------------------------------------------------------------