From: "brian m. carlson" <sandals@crustytoothpaste.net>
To: git@vger.kernel.org
Cc: Elijah Newren <newren@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Stefan Beller <sbeller@google.com>, Jeff King <peff@peff.net>
Subject: [PATCH 6/8] merge-recursive: convert struct merge_file_info to object_id
Date: Tue, 7 Jun 2016 00:57:14 +0000 [thread overview]
Message-ID: <20160607005716.69222-7-sandals@crustytoothpaste.net> (raw)
In-Reply-To: <20160607005716.69222-2-sandals@crustytoothpaste.net>
Convert struct merge_file_info to use struct object_id. The following
Coccinelle semantic patch was used to implement this, followed by the
transformations in standard.cocci:
@@
struct merge_file_info *p;
@@
- p->sha
+ p->oid.hash
@@
struct merge_file_info o;
@@
- o.sha
+ o.oid.hash
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
merge-recursive.c | 39 ++++++++++++++++++++-------------------
1 file changed, 20 insertions(+), 19 deletions(-)
diff --git a/merge-recursive.c b/merge-recursive.c
index a07050cd..bc455491 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -819,7 +819,7 @@ static void update_file(struct merge_options *o,
/* Low level file merging, update and removal */
struct merge_file_info {
- unsigned char sha[20];
+ struct object_id oid;
unsigned mode;
unsigned clean:1,
merge:1;
@@ -902,10 +902,10 @@ static struct merge_file_info merge_file_1(struct merge_options *o,
result.clean = 0;
if (S_ISREG(a->mode)) {
result.mode = a->mode;
- hashcpy(result.sha, a->oid.hash);
+ oidcpy(&result.oid, &a->oid);
} else {
result.mode = b->mode;
- hashcpy(result.sha, b->oid.hash);
+ oidcpy(&result.oid, &b->oid);
}
} else {
if (!sha_eq(a->oid.hash, one->oid.hash) && !sha_eq(b->oid.hash, one->oid.hash))
@@ -925,9 +925,9 @@ static struct merge_file_info merge_file_1(struct merge_options *o,
}
if (sha_eq(a->oid.hash, b->oid.hash) || sha_eq(a->oid.hash, one->oid.hash))
- hashcpy(result.sha, b->oid.hash);
+ oidcpy(&result.oid, &b->oid);
else if (sha_eq(b->oid.hash, one->oid.hash))
- hashcpy(result.sha, a->oid.hash);
+ oidcpy(&result.oid, &a->oid);
else if (S_ISREG(a->mode)) {
mmbuffer_t result_buf;
int merge_status;
@@ -939,21 +939,21 @@ static struct merge_file_info merge_file_1(struct merge_options *o,
die(_("Failed to execute internal merge"));
if (write_sha1_file(result_buf.ptr, result_buf.size,
- blob_type, result.sha))
+ blob_type, result.oid.hash))
die(_("Unable to add %s to database"),
a->path);
free(result_buf.ptr);
result.clean = (merge_status == 0);
} else if (S_ISGITLINK(a->mode)) {
- result.clean = merge_submodule(result.sha,
+ result.clean = merge_submodule(result.oid.hash,
one->path,
one->oid.hash,
a->oid.hash,
b->oid.hash,
!o->call_depth);
} else if (S_ISLNK(a->mode)) {
- hashcpy(result.sha, a->oid.hash);
+ oidcpy(&result.oid, &a->oid);
if (!sha_eq(a->oid.hash, b->oid.hash))
result.clean = 0;
@@ -1192,7 +1192,7 @@ static void conflict_rename_rename_1to2(struct merge_options *o,
* pathname and then either rename the add-source file to that
* unique path, or use that unique path instead of src here.
*/
- update_file(o, 0, mfi.sha, mfi.mode, one->path);
+ update_file(o, 0, mfi.oid.hash, mfi.mode, one->path);
/*
* Above, we put the merged content at the merge-base's
@@ -1255,16 +1255,16 @@ static void conflict_rename_rename_2to1(struct merge_options *o,
* again later for the non-recursive merge.
*/
remove_file(o, 0, path, 0);
- update_file(o, 0, mfi_c1.sha, mfi_c1.mode, a->path);
- update_file(o, 0, mfi_c2.sha, mfi_c2.mode, b->path);
+ update_file(o, 0, mfi_c1.oid.hash, mfi_c1.mode, a->path);
+ update_file(o, 0, mfi_c2.oid.hash, mfi_c2.mode, b->path);
} else {
char *new_path1 = unique_path(o, path, ci->branch1);
char *new_path2 = unique_path(o, path, ci->branch2);
output(o, 1, _("Renaming %s to %s and %s to %s instead"),
a->path, new_path1, b->path, new_path2);
remove_file(o, 0, path, 0);
- update_file(o, 0, mfi_c1.sha, mfi_c1.mode, new_path1);
- update_file(o, 0, mfi_c2.sha, mfi_c2.mode, new_path2);
+ update_file(o, 0, mfi_c1.oid.hash, mfi_c1.mode, new_path1);
+ update_file(o, 0, mfi_c2.oid.hash, mfi_c2.mode, new_path2);
free(new_path2);
free(new_path1);
}
@@ -1474,7 +1474,8 @@ static int process_renames(struct merge_options *o,
dst_other.mode,
branch1, branch2);
output(o, 1, _("Adding merged %s"), ren1_dst);
- update_file(o, 0, mfi.sha, mfi.mode, ren1_dst);
+ update_file(o, 0, mfi.oid.hash,
+ mfi.mode, ren1_dst);
try_merge = 0;
} else {
char *new_path = unique_path(o, ren1_dst, branch2);
@@ -1634,7 +1635,7 @@ static int merge_content(struct merge_options *o,
o->branch2, path2);
if (mfi.clean && !df_conflict_remains &&
- sha_eq(mfi.sha, a_sha) && mfi.mode == a_mode) {
+ sha_eq(mfi.oid.hash, a_sha) && mfi.mode == a_mode) {
int path_renamed_outside_HEAD;
output(o, 3, _("Skipped %s (merged same as existing)"), path);
/*
@@ -1645,7 +1646,7 @@ static int merge_content(struct merge_options *o,
*/
path_renamed_outside_HEAD = !path2 || !strcmp(path, path2);
if (!path_renamed_outside_HEAD) {
- add_cacheinfo(mfi.mode, mfi.sha, path,
+ add_cacheinfo(mfi.mode, mfi.oid.hash, path,
0, (!o->call_depth), 0);
return mfi.clean;
}
@@ -1671,7 +1672,7 @@ static int merge_content(struct merge_options *o,
else {
int file_from_stage2 = was_tracked(path);
struct diff_filespec merged;
- hashcpy(merged.oid.hash, mfi.sha);
+ oidcpy(&merged.oid, &mfi.oid);
merged.mode = mfi.mode;
update_stages(path, NULL,
@@ -1682,11 +1683,11 @@ static int merge_content(struct merge_options *o,
}
new_path = unique_path(o, path, rename_conflict_info->branch1);
output(o, 1, _("Adding as %s instead"), new_path);
- update_file(o, 0, mfi.sha, mfi.mode, new_path);
+ update_file(o, 0, mfi.oid.hash, mfi.mode, new_path);
free(new_path);
mfi.clean = 0;
} else {
- update_file(o, mfi.clean, mfi.sha, mfi.mode, path);
+ update_file(o, mfi.clean, mfi.oid.hash, mfi.mode, path);
}
return mfi.clean;
next prev parent reply other threads:[~2016-06-07 0:58 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-07 0:57 [PATCH 1/8] Add basic Coccinelle transforms brian m. carlson
2016-06-07 0:57 ` [PATCH 2/8] Apply standard object_id Coccinelle transformations brian m. carlson
2016-06-07 0:57 ` [PATCH 3/8] Convert struct diff_filespec to struct object_id brian m. carlson
2016-06-07 0:57 ` [PATCH 4/8] Rename struct diff_filespec's sha1_valid member brian m. carlson
2016-06-07 6:21 ` Johannes Sixt
2016-06-07 6:23 ` Jeff King
2016-06-07 19:14 ` Junio C Hamano
2016-06-07 23:12 ` brian m. carlson
2016-06-07 0:57 ` [PATCH 5/8] merge-recursive: convert struct stage_data to use object_id brian m. carlson
2016-06-07 0:57 ` brian m. carlson [this message]
2016-06-07 0:57 ` [PATCH 7/8] merge-recursive: convert leaf functions to use struct object_id brian m. carlson
2016-06-07 0:57 ` [PATCH 8/8] merge-recursive: convert merge_recursive_generic to object_id brian m. carlson
2016-06-07 2:28 ` [PATCH 1/8] Add basic Coccinelle transforms Junio C Hamano
2016-06-07 2:31 ` brian m. carlson
2016-06-07 2:54 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160607005716.69222-7-sandals@crustytoothpaste.net \
--to=sandals@crustytoothpaste.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).