Skip to content

Commit

Permalink
vcs-svn: read instructions from deltas
Browse files Browse the repository at this point in the history
Buffer the instruction section upon encountering it for later
interpretation.

An alternative design would involve parsing the instructions
at this point and buffering them in some processed form.  Using
the unprocessed form is simpler.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Ramkumar Ramachandra <artagnon@gmail.com>
  • Loading branch information
Jonathan Nieder committed Mar 28, 2011
1 parent fc4ae43 commit ef2ac77
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
5 changes: 5 additions & 0 deletions t/t9011-svn-da.sh
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,9 @@ test_expect_success 'reject truncated inline data' '
test_must_fail test-svn-fe -d preimage inline.trunc 10
'

test_expect_success 'reject truncated inline data (after instruction section)' '
printf "SVNQ%b%b%s" "QQ\001\001\003" "\0201" "b" | q_to_nul >insn.trunc &&
test_must_fail test-svn-fe -d preimage insn.trunc 11
'

test_done
7 changes: 5 additions & 2 deletions vcs-svn/svndiff.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,15 @@
#define VLI_BITS_PER_DIGIT 7

struct window {
struct strbuf instructions;
struct strbuf data;
};

#define WINDOW_INIT { STRBUF_INIT }
#define WINDOW_INIT { STRBUF_INIT, STRBUF_INIT }

static void window_release(struct window *ctx)
{
strbuf_release(&ctx->instructions);
strbuf_release(&ctx->data);
}

Expand Down Expand Up @@ -124,7 +126,8 @@ static int apply_one_window(struct line_buffer *delta, off_t *delta_len)
/* "source view" offset and length already handled; */
if (read_length(delta, &out_len, delta_len) ||
read_length(delta, &instructions_len, delta_len) ||
read_length(delta, &data_len, delta_len))
read_length(delta, &data_len, delta_len) ||
read_chunk(delta, delta_len, &ctx.instructions, instructions_len))
goto error_out;
if (instructions_len) {
error("What do you think I am? A delta applier?");
Expand Down

0 comments on commit ef2ac77

Please sign in to comment.