summaryrefslogtreecommitdiff
path: root/t/t1007-hash-object.sh
blob: 1ec0535138c72bbd1e497c35c21bc5ea46b0315f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/sh
 
test_description="git-hash-object"
 
. ./test-lib.sh
 
echo_without_newline() {
	printf '%s' "$*"
}
 
test_blob_does_not_exist() {
	test_expect_success 'blob does not exist in database' "
		test_must_fail git cat-file blob $1
	"
}
 
test_blob_exists() {
	test_expect_success 'blob exists in database' "
		git cat-file blob $1
	"
}
 
hello_content="Hello World"
hello_sha1=5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689
 
example_content="This is an example"
example_sha1=ddd3f836d3e3fbb7ae289aa9ae83536f76956399
 
setup_repo() {
	echo_without_newline "$hello_content" > hello
	echo_without_newline "$example_content" > example
}
 
test_repo=test
push_repo() {
	test_create_repo $test_repo
	cd $test_repo
 
	setup_repo
}
 
pop_repo() {
	cd ..
	rm -rf $test_repo
}
 
setup_repo
 
# Argument checking
 
test_expect_success "multiple '--stdin's are rejected" '
	test_must_fail git hash-object --stdin --stdin < example
'
 
test_expect_success "Can't use --stdin and --stdin-paths together" '
	test_must_fail git hash-object --stdin --stdin-paths &&
	test_must_fail git hash-object --stdin-paths --stdin
'
 
test_expect_success "Can't pass filenames as arguments with --stdin-paths" '
	test_must_fail git hash-object --stdin-paths hello < example
'
 
# Behavior
 
push_repo
 
test_expect_success 'hash a file' '
	test $hello_sha1 = $(git hash-object hello)
'
 
test_blob_does_not_exist $hello_sha1
 
test_expect_success 'hash from stdin' '
	test $example_sha1 = $(git hash-object --stdin < example)
'
 
test_blob_does_not_exist $example_sha1
 
test_expect_success 'hash a file and write to database' '
	test $hello_sha1 = $(git hash-object -w hello)
'
 
test_blob_exists $hello_sha1
 
test_expect_success 'git hash-object --stdin file1 <file0 first operates on file0, then file1' '
	echo foo > file1 &&
	obname0=$(echo bar | git hash-object --stdin) &&
	obname1=$(git hash-object file1) &&
	obname0new=$(echo bar | git hash-object --stdin file1 | sed -n -e 1p) &&
	obname1new=$(echo bar | git hash-object --stdin file1 | sed -n -e 2p) &&
	test "$obname0" = "$obname0new" &&
	test "$obname1" = "$obname1new"
'
 
pop_repo
 
for args in "-w --stdin" "--stdin -w"; do
	push_repo
 
	test_expect_success "hash from stdin and write to database ($args)" '
		test $example_sha1 = $(git hash-object $args < example)
	'
 
	test_blob_exists $example_sha1
 
	pop_repo
done
 
filenames="hello
example"
 
sha1s="$hello_sha1
$example_sha1"
 
test_expect_success "hash two files with names on stdin" '
	test "$sha1s" = "$(echo_without_newline "$filenames" | git hash-object --stdin-paths)"
'
 
for args in "-w --stdin-paths" "--stdin-paths -w"; do
	push_repo
 
	test_expect_success "hash two files with names on stdin and write to database ($args)" '
		test "$sha1s" = "$(echo_without_newline "$filenames" | git hash-object $args)"
	'
 
	test_blob_exists $hello_sha1
	test_blob_exists $example_sha1
 
	pop_repo
done
 
test_done