mirror of
https://github.com/git/git.git
synced 2024-10-19 15:18:24 +02:00
12a58f9014
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) */
|