git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 00/11] struct object_id, Part 4

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Jun 24, 2016, 23:09 UTC
Message-ID
<20160624230929.82222-1-sandals@crustytoothpaste.net>

This series is part 4 in a series of conversions to replace instances of unsigned char [20] with struct object_id. Most of this series touches the merge-recursive code.

New in this series is the use of Coccinelle (http://coccinelle.lip6.fr/) semantic patches. These semantic patches can make automatic transformations to C source code for cleanup or refactoring reasons.

This series introduces a set of transforms for the struct object_id transition, cleans up some existing code with them, and applies a small number of semantic patches to transform parts of the merge-recursive code. Some manual refactoring work follows.

Note that in the patches created with the semantic patches, the only manual change was the definition of the struct member. Opinions on whether this is a viable technique for further work to ease both the creation and review of patches are of course welcomed.

The testsuite continues to pass at each step, and this series rebases cleanly on next.

I picked up Junio's change from sha_eq to oid_eq, but didn't convert the calls to oidcmp. I think the current version (with oid_eq) is actually more readable than using oidcmp, if slightly less efficient.

Changes from v2:
* Pick up improvements from Junio's version on pu.
* Add oid_to_hex_r.
* Add oid_to_hex_r to object_id.cocci.
* Convert prep_temp_blob as suggested by Junio.
* Converted hashcpy(.*, null_sha1) to hashclr.
Changes from v1:
* Move the object ID transformations to contrib/examples/coccinelle.
* Add a README to that folder explaining what they are.
* Adjust the Coccinelle patches to transform plain structs before
  pointers to structs to avoid misconversions.  This addresses the issue
  that Johannes Sixt caught originally.
brian m. carlson (11):
  hex: add oid_to_hex_r.
  contrib/coccinelle: add basic Coccinelle transforms
  Convert hashcpy with null_sha1 to hashclr.
  coccinelle: apply object_id Coccinelle transformations
  diff: convert struct diff_filespec to struct object_id
  diff: rename struct diff_filespec's sha1_valid member
  merge-recursive: convert struct stage_data to use object_id
  merge-recursive: convert struct merge_file_info to object_id
  merge-recursive: convert leaf functions to use struct object_id
  merge-recursive: convert merge_recursive_generic to object_id
  diff: convert prep_temp_blob to struct object_id.
 bisect.c                           |   2 +-
 builtin/blame.c                    |   6 +-
 builtin/fast-export.c              |  10 +-
 builtin/merge-recursive.c          |  20 +--
 builtin/merge.c                    |  15 +-
 builtin/reset.c                    |   4 +-
 builtin/unpack-objects.c           |   4 +-
 cache.h                            |   1 +
 combine-diff.c                     |  14 +-
 contrib/coccinelle/README          |   2 +
 contrib/coccinelle/object_id.cocci |  95 ++++++++++++
 diff.c                             |  99 ++++++------
 diffcore-break.c                   |   4 +-
 diffcore-rename.c                  |  16 +-
 diffcore.h                         |   4 +-
 hex.c                              |   5 +
 line-log.c                         |  12 +-
 merge-recursive.c                  | 310 +++++++++++++++++++------------------
 merge-recursive.h                  |   6 +-
 notes-merge.c                      |  42 ++---
 refs/files-backend.c               |   4 +-
 submodule-config.c                 |   2 +-
 submodule.c                        |   4 +-
 t/helper/test-submodule-config.c   |   2 +-
 wt-status.c                        |   3 +-
 25 files changed, 403 insertions(+), 283 deletions(-)
 create mode 100644 contrib/coccinelle/README
 create mode 100644 contrib/coccinelle/object_id.cocci
Next: brian m. carlson
Message 1 of 14 in “struct object_id, Part 4”
  1. 00/11 struct object_id, Part 4brian m. carlson, Jun 24, 2016
  2. 01/11 hex: add oid_to_hex_r.brian m. carlson, Jun 24, 2016
  3. 03/11 Convert hashcpy with null_sha1 to hashclr.brian m. carlson, Jun 24, 2016
  4. 04/11 coccinelle: apply object_id Coccinelle transformationsbrian m. carlson, Jun 24, 2016
  5. 05/11 diff: convert struct diff_filespec to struct object_idbrian m. carlson, Jun 24, 2016
  6. 10/11 merge-recursive: convert merge_recursive_generic to object_idbrian m. carlson, Jun 24, 2016
  7. 09/11 merge-recursive: convert leaf functions to use struct object_idbrian m. carlson, Jun 24, 2016
  8. 11/11 diff: convert prep_temp_blob to struct object_id.brian m. carlson, Jun 24, 2016
  9. 07/11 merge-recursive: convert struct stage_data to use object_idbrian m. carlson, Jun 24, 2016
  10. 02/11 contrib/coccinelle: add basic Coccinelle transformsbrian m. carlson, Jun 24, 2016
  11. 06/11 diff: rename struct diff_filespec's sha1_valid memberbrian m. carlson, Jun 24, 2016
  12. Junio C HamanoJun 25, 2016
  13. brian m. carlsonJun 25, 2016
  14. 08/11 merge-recursive: convert struct merge_file_info to object_idbrian m. carlson, Jun 24, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.