86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| # Inflate the size of an EXISTING repo.
 | |
| #
 | |
| # This script should be run inside the worktree of a TEST repo.
 | |
| # It will use the contents of the current HEAD to generate a
 | |
| # commit containing copies of the current worktree such that the
 | |
| # total size of the commit has at least <target_size> files.
 | |
| #
 | |
| # Usage: [-t target_size] [-b branch_name]
 | |
| 
 | |
| set -e
 | |
| 
 | |
| target_size=10000
 | |
| branch_name=p0006-ballast
 | |
| ballast=ballast
 | |
| 
 | |
| while test "$#" -ne 0
 | |
| do
 | |
|     case "$1" in
 | |
| 	-b)
 | |
| 	    shift;
 | |
| 	    test "$#" -ne 0 || { echo 'error: -b requires an argument' >&2; exit 1; }
 | |
| 	    branch_name=$1;
 | |
| 	    shift ;;
 | |
| 	-t)
 | |
| 	    shift;
 | |
| 	    test "$#" -ne 0 || { echo 'error: -t requires an argument' >&2; exit 1; }
 | |
| 	    target_size=$1;
 | |
| 	    shift ;;
 | |
| 	*)
 | |
| 	    echo "error: unknown option '$1'" >&2; exit 1 ;;
 | |
|     esac
 | |
| done
 | |
| 
 | |
| git ls-tree -r HEAD >GEN_src_list
 | |
| nr_src_files=$(cat GEN_src_list | wc -l)
 | |
| 
 | |
| src_branch=$(git symbolic-ref --short HEAD)
 | |
| 
 | |
| echo "Branch $src_branch initially has $nr_src_files files."
 | |
| 
 | |
| if test $target_size -le $nr_src_files
 | |
| then
 | |
|     echo "Repository already exceeds target size $target_size."
 | |
|     rm GEN_src_list
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| # Create well-known branch and add 1 file change to start
 | |
| # if off before the ballast.
 | |
| git checkout -b $branch_name HEAD
 | |
| echo "$target_size" > inflate-repo.params
 | |
| git add inflate-repo.params
 | |
| git commit -q -m params
 | |
| 
 | |
| # Create ballast for in our branch.
 | |
| copy=1
 | |
| nr_files=$nr_src_files
 | |
| while test $nr_files -lt $target_size
 | |
| do
 | |
|     sed -e "s|	|	$ballast/$copy/|" <GEN_src_list |
 | |
| 	git update-index --index-info
 | |
| 
 | |
|     nr_files=$(expr $nr_files + $nr_src_files)
 | |
|     copy=$(expr $copy + 1)
 | |
| done
 | |
| rm GEN_src_list
 | |
| git commit -q -m "ballast"
 | |
| 
 | |
| # Modify 1 file and commit.
 | |
| echo "$target_size" >> inflate-repo.params
 | |
| git add inflate-repo.params
 | |
| git commit -q -m "ballast plus 1"
 | |
| 
 | |
| nr_files=$(git ls-files | wc -l)
 | |
| 
 | |
| # Checkout master to put repo in canonical state (because
 | |
| # the perf test may need to clone and enable sparse-checkout
 | |
| # before attempting to checkout a commit with the ballast
 | |
| # (because it may contain 100K directories and 1M files)).
 | |
| git checkout $src_branch
 | |
| 
 | |
| echo "Repository inflated. Branch $branch_name has $nr_files files."
 | |
| 
 | |
| exit 0
 |