am c64e76c7: Merge "Enable incremental builder to find files that moved, and try to process them via patch + rename, instead of delete + add." into klp-dev
* commit 'c64e76c75088b951f61a7f7bacf8af6eccd2ccfa': Enable incremental builder to find files that moved, and try to process them via patch + rename, instead of delete + add.
This commit is contained in:
@@ -285,6 +285,40 @@ done:
|
|||||||
return StringValue(result);
|
return StringValue(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Value* RenameFn(const char* name, State* state, int argc, Expr* argv[]) {
|
||||||
|
char* result = NULL;
|
||||||
|
if (argc != 2) {
|
||||||
|
return ErrorAbort(state, "%s() expects 2 args, got %d", name, argc);
|
||||||
|
}
|
||||||
|
|
||||||
|
char* src_name;
|
||||||
|
char* dst_name;
|
||||||
|
|
||||||
|
if (ReadArgs(state, argv, 2, &src_name, &dst_name) < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (strlen(src_name) == 0) {
|
||||||
|
ErrorAbort(state, "src_name argument to %s() can't be empty", name);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
if (strlen(dst_name) == 0) {
|
||||||
|
ErrorAbort(state, "dst_name argument to %s() can't be empty",
|
||||||
|
name);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rename(src_name, dst_name) != 0) {
|
||||||
|
ErrorAbort(state, "Rename of %s() to %s() failed, error %s()",
|
||||||
|
src_name, dst_name, strerror(errno));
|
||||||
|
} else {
|
||||||
|
result = dst_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
free(src_name);
|
||||||
|
if (result != dst_name) free(dst_name);
|
||||||
|
return StringValue(result);
|
||||||
|
}
|
||||||
|
|
||||||
Value* DeleteFn(const char* name, State* state, int argc, Expr* argv[]) {
|
Value* DeleteFn(const char* name, State* state, int argc, Expr* argv[]) {
|
||||||
char** paths = malloc(argc * sizeof(char*));
|
char** paths = malloc(argc * sizeof(char*));
|
||||||
@@ -1338,6 +1372,7 @@ void RegisterInstallFunctions() {
|
|||||||
|
|
||||||
RegisterFunction("read_file", ReadFileFn);
|
RegisterFunction("read_file", ReadFileFn);
|
||||||
RegisterFunction("sha1_check", Sha1CheckFn);
|
RegisterFunction("sha1_check", Sha1CheckFn);
|
||||||
|
RegisterFunction("rename", RenameFn);
|
||||||
|
|
||||||
RegisterFunction("wipe_cache", WipeCacheFn);
|
RegisterFunction("wipe_cache", WipeCacheFn);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user