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