unpack-trees.hon commit clone: report duplicate entries on case-insensitive filesystems (b878579)
   1#ifndef UNPACK_TREES_H
   2#define UNPACK_TREES_H
   3
   4#include "tree-walk.h"
   5#include "argv-array.h"
   6
   7#define MAX_UNPACK_TREES 8
   8
   9struct unpack_trees_options;
  10struct exclude_list;
  11
  12typedef int (*merge_fn_t)(const struct cache_entry * const *src,
  13                struct unpack_trees_options *options);
  14
  15enum unpack_trees_error_types {
  16        ERROR_WOULD_OVERWRITE = 0,
  17        ERROR_NOT_UPTODATE_FILE,
  18        ERROR_NOT_UPTODATE_DIR,
  19        ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN,
  20        ERROR_WOULD_LOSE_UNTRACKED_REMOVED,
  21        ERROR_BIND_OVERLAP,
  22        ERROR_SPARSE_NOT_UPTODATE_FILE,
  23        ERROR_WOULD_LOSE_ORPHANED_OVERWRITTEN,
  24        ERROR_WOULD_LOSE_ORPHANED_REMOVED,
  25        ERROR_WOULD_LOSE_SUBMODULE,
  26        NB_UNPACK_TREES_ERROR_TYPES
  27};
  28
  29/*
  30 * Sets the list of user-friendly error messages to be used by the
  31 * command "cmd" (either merge or checkout), and show_all_errors to 1.
  32 */
  33void setup_unpack_trees_porcelain(struct unpack_trees_options *opts,
  34                                  const char *cmd);
  35
  36/*
  37 * Frees resources allocated by setup_unpack_trees_porcelain().
  38 */
  39void clear_unpack_trees_porcelain(struct unpack_trees_options *opts);
  40
  41struct unpack_trees_options {
  42        unsigned int reset,
  43                     merge,
  44                     update,
  45                     clone,
  46                     index_only,
  47                     nontrivial_merge,
  48                     trivial_merges_only,
  49                     verbose_update,
  50                     aggressive,
  51                     skip_unmerged,
  52                     initial_checkout,
  53                     diff_index_cached,
  54                     debug_unpack,
  55                     skip_sparse_checkout,
  56                     gently,
  57                     exiting_early,
  58                     show_all_errors,
  59                     dry_run;
  60        const char *prefix;
  61        int cache_bottom;
  62        struct dir_struct *dir;
  63        struct pathspec *pathspec;
  64        merge_fn_t fn;
  65        const char *msgs[NB_UNPACK_TREES_ERROR_TYPES];
  66        struct argv_array msgs_to_free;
  67        /*
  68         * Store error messages in an array, each case
  69         * corresponding to a error message type
  70         */
  71        struct string_list unpack_rejects[NB_UNPACK_TREES_ERROR_TYPES];
  72
  73        int head_idx;
  74        int merge_size;
  75
  76        struct cache_entry *df_conflict_entry;
  77        void *unpack_data;
  78
  79        struct index_state *dst_index;
  80        struct index_state *src_index;
  81        struct index_state result;
  82
  83        struct exclude_list *el; /* for internal use */
  84};
  85
  86extern int unpack_trees(unsigned n, struct tree_desc *t,
  87                struct unpack_trees_options *options);
  88
  89int verify_uptodate(const struct cache_entry *ce,
  90                    struct unpack_trees_options *o);
  91
  92int threeway_merge(const struct cache_entry * const *stages,
  93                   struct unpack_trees_options *o);
  94int twoway_merge(const struct cache_entry * const *src,
  95                 struct unpack_trees_options *o);
  96int bind_merge(const struct cache_entry * const *src,
  97               struct unpack_trees_options *o);
  98int oneway_merge(const struct cache_entry * const *src,
  99                 struct unpack_trees_options *o);
 100
 101#endif