##// END OF EJS Templates
phases: large rewrite on retract boundary...
phases: large rewrite on retract boundary The new code is still pure Python, so we still have room to going significantly faster. However its complexity of the complex part is `O(|[min_new_draft, tip]|)` instead of `O(|[min_draft, tip]|` which should help tremendously one repository with old draft (like mercurial-devel or mozilla-try). This is especially useful as the most common "retract boundary" operation happens when we commit/rewrite new drafts or when we push new draft to a non-publishing server. In this case, the smallest new_revs is very close to the tip and there is very few work to do. A few smaller optimisation could be done for these cases and will be introduced in later changesets. We still have iterate over large sets of roots, but this is already a great improvement for a very small amount of work. We gather information on the affected changeset as we go as we can put it to use in the next changesets. This extra data collection might slowdown the `register_new` case a bit, however for register_new, it should not really matters. The set of new nodes is either small, so the impact is negligible, or the set of new nodes is large, and the amount of work to do to had them will dominate the overhead the collecting information in `changed_revs`. As this new code compute the changes on the fly, it unlock other interesting improvement to be done in later changeset.

File last commit:

r36781:90f8fe72 default
r52302:2f39c7ae default
Show More
xdiffi.h
58 lines | 1.6 KiB | text/x-c | CLexer
Jun Wu
xdiff: vendor xdiff library from git...
r36689 /*
* 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 {
Jun Wu
xdiff: replace {unsigned ,}long with {u,}int64_t...
r36840 int64_t nrec;
uint64_t const *ha;
int64_t *rindex;
Jun Wu
xdiff: vendor xdiff library from git...
r36689 char *rchg;
} diffdata_t;
typedef struct s_xdalgoenv {
Jun Wu
xdiff: replace {unsigned ,}long with {u,}int64_t...
r36840 int64_t mxcost;
int64_t snake_cnt;
int64_t heur_min;
Jun Wu
xdiff: vendor xdiff library from git...
r36689 } xdalgoenv_t;
typedef struct s_xdchange {
struct s_xdchange *next;
Jun Wu
xdiff: replace {unsigned ,}long with {u,}int64_t...
r36840 int64_t i1, i2;
int64_t chg1, chg2;
Jun Wu
xdiff: vendor xdiff library from git...
r36689 int ignore;
} xdchange_t;
Jun Wu
xdiff: replace {unsigned ,}long with {u,}int64_t...
r36840 int xdl_recs_cmp(diffdata_t *dd1, int64_t off1, int64_t lim1,
diffdata_t *dd2, int64_t off2, int64_t lim2,
int64_t *kvdf, int64_t *kvdb, int need_min, xdalgoenv_t *xenv);
Jun Wu
xdiff: vendor xdiff library from git...
r36689 int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
xdfenv_t *xe);
Jun Wu
xdiff: replace {unsigned ,}long with {u,}int64_t...
r36840 int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, int64_t flags);
Jun Wu
xdiff: vendor xdiff library from git...
r36689 int xdl_build_script(xdfenv_t *xe, xdchange_t **xscr);
void xdl_free_script(xdchange_t *xscr);
#endif /* #if !defined(XDIFFI_H) */