Thread (46 messages) 46 messages, 3 authors, 2016-10-06

Re: [PATCH v8 11/11] convert: add filter.<driver>.process option

From: Lars Schneider <hidden>
Date: 2016-10-06 21:27:45

On 04 Oct 2016, at 23:00, Jakub Narębski [off-list ref] wrote:

[Some of answers and comments may got invalidated by v9]

W dniu 30.09.2016 o 21:38, Lars Schneider pisze:
quoted
quoted
On 27 Sep 2016, at 17:37, Jakub Narębski [off-list ref] wrote:

Part second of the review of 11/11.
[...]
quoted
quoted
quoted
+
+	if (start_command(process)) {
+		error("cannot fork to run external filter '%s'", cmd);
+		kill_multi_file_filter(hashmap, entry);
+		return NULL;
+	}
I guess there is a reason why we init hashmap entry, try to start
external process, then kill entry of unable to start, instead of
trying to start external process, and adding hashmap entry when
we succeed?
Yes. This way I can reuse the kill_multi_file_filter() function.
I don't quite understand.  If you didn't fill the entry before
using start_command(process), you would not need kill_multi_file_filter(),
which in that case IIUC just removes the just created entry from hashmap.
Couldn't you add entry to hashmap in the 'else' part?  Or would it
be racy?
You are right. I'll fix that.

quoted
quoted
quoted
+		if (pair[0] && pair[0]->len && pair[1]) {
+			if (!strcmp(pair[0]->buf, "status=")) {
+				strbuf_reset(status);
+				strbuf_addbuf(status, pair[1]);
+			}
So it is last status=<foo> line wins behavior?
Correct.
Perhaps this should be described in code comment.
OK

quoted
quoted
quoted
+	fflush(NULL);
Why this fflush(NULL) is needed here?
This flushes all open output streams. The single filter does the same.
I know what it does, but I don't know why.  But "single filter does it"
is good enough for me.  Still would want to know why, though ;-)
TBH I am not 100% sure why, too. I think this ensures that we don't have 
any outdated/unrelated/previous data in the stream buffers.

quoted
quoted
quoted
+	if (fd >= 0 && !src) {
+		if (fstat(fd, &file_stat) == -1)
+			return 0;
+		len = xsize_t(file_stat.st_size);
+	}
Errr... is it necessary?  The protocol no longer provides size=<n>
hint, and neither uses such hint if provided.
We require the size in write_packetized_from_buf() later.
Don't we use write_packetized_from_fd() in the case of fd >= 0?
Of course! Ah too many refactorings :-)
I'll remove that.

Thank you,
Lars
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help