summaryrefslogtreecommitdiff
path: root/t/t5304-prune.sh
blob: 55ed7c7935c007573761842cea5978a784c865b3 (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/sh
#
# Copyright (c) 2008 Johannes E. Schindelin
#
 
test_description='prune'
. ./test-lib.sh
 
test_expect_success setup '
 
	: > file &&
	git add file &&
	test_tick &&
	git commit -m initial &&
	git gc
 
'
 
test_expect_success 'prune stale packs' '
 
	orig_pack=$(echo .git/objects/pack/*.pack) &&
	: > .git/objects/tmp_1.pack &&
	: > .git/objects/tmp_2.pack &&
	test-chmtime =-86501 .git/objects/tmp_1.pack &&
	git prune --expire 1.day &&
	test -f $orig_pack &&
	test -f .git/objects/tmp_2.pack &&
	! test -f .git/objects/tmp_1.pack
 
'
 
test_expect_success 'prune --expire' '
 
	before=$(git count-objects | sed "s/ .*//") &&
	BLOB=$(echo aleph | git hash-object -w --stdin) &&
	BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
	test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
	test -f $BLOB_FILE &&
	git prune --expire=1.hour.ago &&
	test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
	test -f $BLOB_FILE &&
	test-chmtime =-86500 $BLOB_FILE &&
	git prune --expire 1.day &&
	test $before = $(git count-objects | sed "s/ .*//") &&
	! test -f $BLOB_FILE
 
'
 
test_expect_success 'gc: implicit prune --expire' '
 
	before=$(git count-objects | sed "s/ .*//") &&
	BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
	BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
	test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
	test -f $BLOB_FILE &&
	test-chmtime =-$((86400*14-30)) $BLOB_FILE &&
	git gc &&
	test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
	test -f $BLOB_FILE &&
	test-chmtime =-$((86400*14+1)) $BLOB_FILE &&
	git gc &&
	test $before = $(git count-objects | sed "s/ .*//") &&
	! test -f $BLOB_FILE
 
'
 
test_expect_success 'gc: refuse to start with invalid gc.pruneExpire' '
 
	git config gc.pruneExpire invalid &&
	test_must_fail git gc
 
'
 
test_expect_success 'gc: start with ok gc.pruneExpire' '
 
	git config gc.pruneExpire 2.days.ago &&
	git gc
 
'
 
test_expect_success 'prune: prune nonsense parameters' '
 
	test_must_fail git prune garbage &&
	test_must_fail git prune --- &&
	test_must_fail git prune --no-such-option
 
'
 
test_expect_success 'prune: prune unreachable heads' '
 
	git config core.logAllRefUpdates false &&
	mv .git/logs .git/logs.old &&
	: > file2 &&
	git add file2 &&
	git commit -m temporary &&
	tmp_head=$(git rev-list -1 HEAD) &&
	git reset HEAD^ &&
	git prune &&
	test_must_fail git reset $tmp_head --
 
'
 
test_expect_success 'prune: do not prune heads listed as an argument' '
 
	: > file2 &&
	git add file2 &&
	git commit -m temporary &&
	tmp_head=$(git rev-list -1 HEAD) &&
	git reset HEAD^ &&
	git prune -- $tmp_head &&
	git reset $tmp_head --
 
'
 
test_expect_success 'gc --no-prune' '
 
	before=$(git count-objects | sed "s/ .*//") &&
	BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
	BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
	test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
	test -f $BLOB_FILE &&
	test-chmtime =-$((86400*5001)) $BLOB_FILE &&
	git config gc.pruneExpire 2.days.ago &&
	git gc --no-prune &&
	test 1 = $(git count-objects | sed "s/ .*//") &&
	test -f $BLOB_FILE
 
'
 
test_expect_success 'gc respects gc.pruneExpire' '
 
	git config gc.pruneExpire 5002.days.ago &&
	git gc &&
	test -f $BLOB_FILE &&
	git config gc.pruneExpire 5000.days.ago &&
	git gc &&
	test ! -f $BLOB_FILE
 
'
 
test_expect_success 'gc --prune=<date>' '
 
	BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
	BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
	test-chmtime =-$((86400*5001)) $BLOB_FILE &&
	git gc --prune=5002.days.ago &&
	test -f $BLOB_FILE &&
	git gc --prune=5000.days.ago &&
	test ! -f $BLOB_FILE
 
'
 
test_done