1#!/bin/sh 2 3test_description='miscellaneous rev-list tests' 4 5. ./test-lib.sh 6 7test_expect_success setup ' 8 echo content1 >wanted_file && 9 echo content2 >unwanted_file && 10 git add wanted_file unwanted_file && 11 git commit -m one 12' 13 14test_expect_success 'rev-list --objects heeds pathspecs'' 15 git rev-list --objects HEAD -- wanted_file >output && 16 grep wanted_file output && 17 ! grep unwanted_file output 18' 19 20test_expect_success 'rev-list --objects with pathspecs and deeper paths'' 21 mkdir foo && 22 >foo/file && 23 git add foo/file && 24 git commit -m two && 25 26 git rev-list --objects HEAD -- foo >output && 27 grep foo/file output && 28 29 git rev-list --objects HEAD -- foo/file >output && 30 grep foo/file output && 31 ! grep unwanted_file output 32' 33 34test_expect_success 'rev-list --objects with pathspecs and copied files'' 35 git checkout --orphan junio-testcase && 36 git rm -rf . && 37 38 mkdir two && 39 echo frotz >one && 40 cp one two/three && 41 git add one two/three && 42 test_tick && 43 git commit -m that && 44 45 ONE=$(git rev-parse HEAD:one)&& 46 git rev-list --objects HEAD two >output && 47 grep "$ONEtwo/three" output && 48 ! grep one output 49' 50 51test_expect_success 'rev-list A..B and rev-list ^A B are the same'' 52 git commit --allow-empty -m another && 53 git tag -a -m "annotated" v1.0 && 54 git rev-list --objects ^v1.0^ v1.0 >expect && 55 git rev-list --objects v1.0^..v1.0 >actual && 56 test_cmp expect actual 57' 58 59test_expect_success 'propagate uninteresting flag down correctly'' 60 git rev-list --objects ^HEAD^{tree} HEAD^{tree} >actual && 61 >expect && 62 test_cmp expect actual 63' 64 65test_expect_success 'symleft flag bit is propagated down from tag'' 66 git log --format="%m %s" --left-right v1.0...master >actual && 67 cat >expect <<-\EOF && 68 > two 69 > one 70 < another 71 < that 72 EOF 73 test_cmp expect actual 74' 75 76test_expect_success 'rev-list can show index objects'' 77 # Of the blobs and trees in the index, note: 78 # 79 # - we do not show two/three, because it is the 80 # same blob as "one", and we show objects only once 81 # 82 # - we do show the tree "two", because it has a valid cache tree 83 # from the last commit 84 # 85 # - we do not show the root tree; since we updated the index, it 86 # does not have a valid cache tree 87 # 88 cat >expect <<-\EOF && 89 8e4020bb5a8d8c873b25de15933e75cc0fc275df one 90 d9d3a7417b9605cfd88ee6306b28dadc29e6ab08 only-in-index 91 9200b628cf9dc883a85a7abc8d6e6730baee589c two 92 EOF 93 echo only-in-index >only-in-index && 94 git add only-in-index && 95 git rev-list --objects --indexed-objects >actual && 96 test_cmp expect actual 97' 98 99test_expect_success '--bisect and --first-parent can not be combined'' 100 test_must_fail git rev-list --bisect --first-parent HEAD 101' 102 103test_expect_success '--header shows a NUL after each commit'' 104 # We know that there is no Q in the true payload; names and 105 # addresses of the authors and the committers do not have 106 # any, and object names or header names do not, either. 107 git rev-list --header --max-count=2 HEAD | 108 nul_to_q | 109 grep "^Q" >actual && 110 cat >expect <<-EOF && 111 Q$(git rev-parse HEAD~1) 112 Q 113 EOF 114 test_cmp expect actual 115' 116 117test_done