mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
![Jeff King](/assets/img/avatar_default.png)
The entry point to the patience-diff algorithm takes two mmfile_t
structs with the original file contents, but it doesn't actually do
anything useful with them. This is similar to the case recently cleaned
up in the histogram code via f1d019071e
(xdiff: drop unused mmfile
parameters from xdl_do_histogram_diff(), 2022-08-19), but there's a bit
more subtlety going on.
We pass them into the recursive patience_diff(), which in turn passes
them into fill_hashmap(), which stuffs the pointers into a struct. But
the only thing which reads the struct fields is our recursion into
patience_diff()!
So it's unlikely that something like -Wunused-parameter could find this
case: it would have to detect the circular dependency caused by the
recursion (not to mention tracing across struct field assignments).
But once found, it's easy to have the compiler confirm what's going on:
1. Drop the "file1" and "file2" fields from the hashmap struct
definition. Remove the assignments in fill_hashmap(), and
temporarily substitute NULL in the recursive call to
patience_diff(). Compiling shows that no other code touched those
fields.
2. Now fill_hashmap() will trigger -Wunused-parameter. Drop "file1"
and "file2" from its definition and callsite.
3. Now patience_diff() will trigger -Wunused-parameter. Drop them
there, too. One of the callsites is the recursion with our
NULL values, so those temporary values go away.
4. Now xdl_do_patience_diff() will trigger -Wunused-parameter. Drop
them there. And we're done.
Suggested-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
63 lines
1.8 KiB
C
63 lines
1.8 KiB
C
/*
|
|
* LibXDiff by Davide Libenzi ( File Differential Library )
|
|
* Copyright (C) 2003 Davide Libenzi
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, see
|
|
* <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Davide Libenzi <davidel@xmailserver.org>
|
|
*
|
|
*/
|
|
|
|
#if !defined(XDIFFI_H)
|
|
#define XDIFFI_H
|
|
|
|
|
|
typedef struct s_diffdata {
|
|
long nrec;
|
|
unsigned long const *ha;
|
|
long *rindex;
|
|
char *rchg;
|
|
} diffdata_t;
|
|
|
|
typedef struct s_xdalgoenv {
|
|
long mxcost;
|
|
long snake_cnt;
|
|
long heur_min;
|
|
} xdalgoenv_t;
|
|
|
|
typedef struct s_xdchange {
|
|
struct s_xdchange *next;
|
|
long i1, i2;
|
|
long chg1, chg2;
|
|
int ignore;
|
|
} xdchange_t;
|
|
|
|
|
|
|
|
int xdl_recs_cmp(diffdata_t *dd1, long off1, long lim1,
|
|
diffdata_t *dd2, long off2, long lim2,
|
|
long *kvdf, long *kvdb, int need_min, xdalgoenv_t *xenv);
|
|
int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
|
|
xdfenv_t *xe);
|
|
int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags);
|
|
int xdl_build_script(xdfenv_t *xe, xdchange_t **xscr);
|
|
void xdl_free_script(xdchange_t *xscr);
|
|
int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
|
|
xdemitconf_t const *xecfg);
|
|
int xdl_do_patience_diff(xpparam_t const *xpp, xdfenv_t *env);
|
|
int xdl_do_histogram_diff(xpparam_t const *xpp, xdfenv_t *env);
|
|
|
|
#endif /* #if !defined(XDIFFI_H) */
|