change: decode and print file moves
Dependencies
- [2]
JVU3TTT5all: switch away from typedefing anonymous structs - [3]
TGT4VSMEchange: decode FILE_ADD - [*]
JAGXXSR7change: initial work on decoding hunks - [*]
Q7TKZCJPAdd initial support for reading the offsets from a (fixed) change - [*]
FMYCPGKDchange: extract hash list decoding into reused function - [*]
XTVLIC24change: refactor to print_change()
Change contents
- edit in hunk.h at line 81
};struct filemetadata {/** metadata - DIR_BIT = 0x200, unix permissions are in* 0x1ff. See libpijul/src/pristine/inode_metadata*/uint16_t inodemetadata;str basename;str encoding; /* Optional<Encoding> */ - edit in change.c at line 335
case FILE_MOVE:change_decode_atom(binstat, &bhunk->filemove.del);change_decode_atom(binstat, &bhunk->filemove.add);slen = bincode_getu64(binstat);bhunk->filemove.path = bincode_getstr(binstat, slen);break; - edit in change.c at line 558[8.253][8.253]
/*** decode a filemetadata struct from the given contents - the input* (contents) are also bincoded, so we need to deserialize it*/static voidread_filemetadata(struct filemetadata *m, uint8_t *contents, size_t contents_len){size_t len;struct bincode bc = { .avail = contents_len, .buf = contents };m->inodemetadata = bincode_getu16(&bc);len = bincode_getu64(&bc);m->basename = bincode_getstr(&bc, len);if (bincode_getu8(&bc)) {len = bincode_getu64(&bc);m->encoding = bincode_getstr(&bc, len);}} - edit in change.c at line 653[3.1193][8.1789]
case FILE_MOVE: {/* read filemetadata from contents */struct filemove *f = &hunk->filemove;struct filemetadata metadata = { 0 };uint64_t start, end;start = f->add.newvertex.start;end = f->add.newvertex.end;read_filemetadata(&metadata, &contents[start], end - start);printf(" %s -> %s\n", f->path, metadata.basename);free(metadata.basename);if (metadata.encoding)free(metadata.encoding);break;}