@@ -153,8 +153,12 @@ def __init__(self, branch, message):
153
153
cmd = ['git' , 'fast-import' , '--date-format=raw' , '--quiet' , '--done' ]
154
154
self ._pipe = sp .Popen (cmd , stdin = sp .PIPE , stderr = sp .DEVNULL ,
155
155
universal_newlines = False )
156
- self ._start_commit (branch , message )
157
156
self ._finished = False
157
+ try :
158
+ self ._start_commit (branch , message )
159
+ except Exception :
160
+ self .abort ()
161
+ raise
158
162
159
163
def __enter__ (self ):
160
164
return self
@@ -173,10 +177,18 @@ def _write(self, data):
173
177
174
178
def _start_commit (self , branch , message ):
175
179
name = get_config ('user.name' )
180
+ if re .search (r'[<>\n]' , name ):
181
+ raise GitError ('invalid user.name: {!r}' .format (name ))
182
+
176
183
email = get_config ('user.email' )
184
+ if not email :
185
+ raise GitError ('user.email is not set' )
186
+ if re .search (r'[<>\n]' , email ):
187
+ raise GitError ('invalid user.email: {!r}' .format (email ))
188
+
177
189
self ._write ('commit refs/heads/{}\n ' .format (branch ))
178
- self ._write ('committer {name} <{email}> {time}\n ' .format (
179
- name = name , email = email , time = make_when ()
190
+ self ._write ('committer {name}<{email}> {time}\n ' .format (
191
+ name = name + ' ' if name else '' , email = email , time = make_when ()
180
192
))
181
193
self ._write ('data {length}\n {message}\n ' .format (
182
194
length = len (message ), message = message
@@ -217,7 +229,10 @@ def abort(self):
217
229
raise GitError ('commit already finalized' )
218
230
self ._finished = True
219
231
220
- self ._pipe .stdin .close ()
232
+ try :
233
+ self ._pipe .stdin .close ()
234
+ except BrokenPipeError : # pragma: no cover
235
+ pass
221
236
self ._pipe .terminate ()
222
237
self ._pipe .wait ()
223
238
0 commit comments