apply: use strsets to track symlinks
Symlink changes are tracked in a string_list, with the util pointer value indicating whether a symlink is kept or removed. Using fake pointer values requires awkward casts. Use one strset for each type of change instead to simplify and shorten the code. Original-patch-by: Jessica Clarke <jrtc27@jrtc27.com> Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
e9d7761bb9
commit
4e9a325253
26
apply.h
26
apply.h
@ -4,6 +4,7 @@
|
||||
#include "hash.h"
|
||||
#include "lockfile.h"
|
||||
#include "string-list.h"
|
||||
#include "strmap.h"
|
||||
|
||||
struct repository;
|
||||
|
||||
@ -25,20 +26,6 @@ enum apply_verbosity {
|
||||
verbosity_verbose = 1
|
||||
};
|
||||
|
||||
/*
|
||||
* We need to keep track of how symlinks in the preimage are
|
||||
* manipulated by the patches. A patch to add a/b/c where a/b
|
||||
* is a symlink should not be allowed to affect the directory
|
||||
* the symlink points at, but if the same patch removes a/b,
|
||||
* it is perfectly fine, as the patch removes a/b to make room
|
||||
* to create a directory a/b so that a/b/c can be created.
|
||||
*
|
||||
* See also "struct string_list symlink_changes" in "struct
|
||||
* apply_state".
|
||||
*/
|
||||
#define APPLY_SYMLINK_GOES_AWAY 01
|
||||
#define APPLY_SYMLINK_IN_RESULT 02
|
||||
|
||||
struct apply_state {
|
||||
const char *prefix;
|
||||
|
||||
@ -85,7 +72,16 @@ struct apply_state {
|
||||
|
||||
/* Various "current state" */
|
||||
int linenr; /* current line number */
|
||||
struct string_list symlink_changes; /* we have to track symlinks */
|
||||
/*
|
||||
* We need to keep track of how symlinks in the preimage are
|
||||
* manipulated by the patches. A patch to add a/b/c where a/b
|
||||
* is a symlink should not be allowed to affect the directory
|
||||
* the symlink points at, but if the same patch removes a/b,
|
||||
* it is perfectly fine, as the patch removes a/b to make room
|
||||
* to create a directory a/b so that a/b/c can be created.
|
||||
*/
|
||||
struct strset removed_symlinks;
|
||||
struct strset kept_symlinks;
|
||||
|
||||
/*
|
||||
* For "diff-stat" like behaviour, we keep track of the biggest change
|
||||
|
Reference in New Issue
Block a user