t/perf: add tests for git-describe
We don't have a perf script for git-describe, despite it often being
accused of slowness. Let's add a few simple tests to start with.
Rather than use the existing tags from our test repo, we'll make our own
so that we have a known quantity and position. We'll add a "new" tag
near the tip of HEAD, and an "old" one that is at the very bottom. And
then our tests are:
  1. Describing HEAD naively requires walking all the way down to the
     old tag as we collect candidates. This gives us a baseline for what
     "slow" looks like.
  2. Doing the same with --candidates=1 can potentially be fast, because
     we can quie after finding "new". But we don't, and it's also slow.
  3. Likewise we should be able to quit when there are no more tags to
     find. This can happen naturally if a repo has few tags, but also if
     you restrict the set of tags with --match.
Here are the results running against linux.git. Note that I have a
commit-graph built for the repo, so "slow" here is ~700ms. Without a
commit graph it's more like 9s!
  Test                                           HEAD
  --------------------------------------------------------------
  6100.2: describe HEAD                          0.70(0.66+0.04)
  6100.3: describe HEAD with one max candidate   0.70(0.66+0.04)
  6100.4: describe HEAD with one tag             0.70(0.64+0.06)
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
This commit is contained in:
		 Jeff King
					Jeff King
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							d0e52c1728
						
					
				
				
					commit
					bb0830c682
				
			
							
								
								
									
										30
									
								
								t/perf/p6100-describe.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								t/perf/p6100-describe.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | test_description='performance of git-describe' | ||||||
|  | . ./perf-lib.sh | ||||||
|  |  | ||||||
|  | test_perf_default_repo | ||||||
|  |  | ||||||
|  | # clear out old tags and give us a known state | ||||||
|  | test_expect_success 'set up tags' ' | ||||||
|  | 	git for-each-ref --format="delete %(refname)" refs/tags >to-delete && | ||||||
|  | 	git update-ref --stdin <to-delete && | ||||||
|  | 	new=$(git rev-list -1000 HEAD | tail -n 1) && | ||||||
|  | 	git tag -m new new $new && | ||||||
|  | 	old=$(git rev-list       HEAD | tail -n 1) && | ||||||
|  | 	git tag -m old old $old | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_perf 'describe HEAD' ' | ||||||
|  | 	git describe HEAD | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_perf 'describe HEAD with one max candidate' ' | ||||||
|  | 	git describe --candidates=1 HEAD | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_perf 'describe HEAD with one tag' ' | ||||||
|  | 	git describe --match=new HEAD | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_done | ||||||
		Reference in New Issue
	
	Block a user