diff options
Diffstat (limited to 'cvsps_types.h')
-rw-r--r-- | cvsps_types.h | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/cvsps_types.h b/cvsps_types.h new file mode 100644 index 0000000..b41e2a9 --- /dev/null +++ b/cvsps_types.h @@ -0,0 +1,162 @@ +/* + * Copyright 2001, 2002, 2003 David Mansfield and Cobite, Inc. + * See COPYING file for license information + */ + +#ifndef CVSPS_TYPES_H +#define CVSPS_TYPES_H + +#include <time.h> + +#define LOG_STR_MAX 32768 +#define AUTH_STR_MAX 64 +#define REV_STR_MAX 64 +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + +typedef struct _CvsFile CvsFile; +typedef struct _PatchSet PatchSet; +typedef struct _PatchSetMember PatchSetMember; +typedef struct _PatchSetRange PatchSetRange; +typedef struct _CvsFileRevision CvsFileRevision; +typedef struct _GlobalSymbol GlobalSymbol; +typedef struct _Tag Tag; + +struct _CvsFileRevision +{ + char * rev; + int dead; + CvsFile * file; + char * branch; + /* + * In the cvs cvs repository (ccvs project) there are tagged + * revisions that don't exist. track 'confirmed' revisions + * so as to not let them screw us up. + */ + int present; + + /* + * A revision can be part of many PatchSets because it may + * be the branch point of many branches (as a pre_rev). + * It should, however, be the 'post_rev' of only one + * PatchSetMember. The 'main line of inheritence' is + * kept in pre_psm, and all 'branch revisions' are kept + * in a list. + */ + PatchSetMember * pre_psm; + PatchSetMember * post_psm; + struct list_head branch_children; + + /* + * for linking this 'first branch rev' into the parent branch_children + */ + struct list_head link; + + /* + * A list of all Tag structures tagging this revision + */ + struct list_head tags; +}; + +struct _CvsFile +{ + char *filename; + struct hash_table * revisions; /* rev_str to revision [CvsFileRevision*] */ + struct hash_table * branches; /* branch to branch_sym [char*] */ + struct hash_table * branches_sym; /* branch_sym to branch [char*] */ + struct hash_table * symbols; /* tag to revision [CvsFileRevision*] */ + /* + * this is a hack. when we initially create entries in the symbol hash + * we don't have the branch info, so the CvsFileRevisions get created + * with the branch attribute NULL. Later we need to resolve these. + */ + int have_branches; +}; + +struct _PatchSetMember +{ + CvsFileRevision * pre_rev; + CvsFileRevision * post_rev; + PatchSet * ps; + CvsFile * file; + /* + * bad_funk is only set w.r.t the -r tags + */ + int bad_funk; + struct list_head link; +}; + +/* + * these are bit flags for tag flags + * they apply to any patchset that + * has an assoctiated tag + */ +#define TAG_FUNKY 0x1 +#define TAG_INVALID 0x2 + +/* values for funk_factor. they apply + * only to the -r tags, to patchsets + * that have an odd relationship to the + * tag + */ +#define FNK_SHOW_SOME 1 +#define FNK_SHOW_ALL 2 +#define FNK_HIDE_ALL 3 +#define FNK_HIDE_SOME 4 + +struct _PatchSet +{ + int psid; + time_t date; + time_t min_date; + time_t max_date; + char *descr; + char *author; + char *tag; + int tag_flags; + char *branch; + char *ancestor_branch; + struct list_head members; + /* + * A 'branch add' patch set is a bogus patch set created automatically + * when a 'file xyz was initially added on branch abc' + * we want to ignore these. fortunately, there's a way to detect them + * without resorting to looking at the log message. + */ + int branch_add; + /* + * If the '-r' option specifies a funky tag, we will need to detect the + * PatchSets that come chronologically before the tag, but are logically + * after, and vice-versa if a second -r option was specified + */ + int funk_factor; + + /* for putting onto a list */ + struct list_head all_link; + struct list_head collision_link; +}; + +struct _PatchSetRange +{ + int min_counter; + int max_counter; + struct list_head link; +}; + +struct _GlobalSymbol +{ + char * tag; + PatchSet * ps; + struct list_head tags; +}; + +struct _Tag +{ + GlobalSymbol * sym; + CvsFileRevision * rev; + char * tag; + struct list_head global_link; + struct list_head rev_link; +}; + +#endif /* CVSPS_TYPES_H */ |