summaryrefslogtreecommitdiff
path: root/cgitcgi/git-shared.h
blob: a81a8f7a9a659b37d1965cbb4252752a1a7c397a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#ifndef    __GIT_SHARED_H
#define    __GIT_SHARED_H

#ifdef __cplusplus
extern "C" {
#endif


typedef void (*cgit_errfunc)( const char *fmt, ... );

extern void cgit_error( const char *fmt, ... ) __attribute__((format (printf,1,2)));
extern cgit_errfunc cgit_fatal; /* Default Fatal Error Function == cgit_error() */

struct short_commit_info {
  char       rev[GIT_OID_HEXSZ+1];
  git_time_t date;
  int        offset;
};

extern int is_bare( const char *path );
extern git_repository *open_repository( const char *path );
extern git_commit *get_commit_by_ref( git_repository *repo, const char *ref );
extern git_commit *get_commit_by_hex( git_repository *repo, const char *hex );
extern void close_repository( git_repository *repo );

extern void fill_short_commit_info( struct short_commit_info *info, const char *path );
extern void fill_commit_info( struct cgit_info *info, const char *path, const char *rpath );
extern void fill_mime_info( struct cgit_info *info, const char *path, const char *rpath );

extern size_t branches_number( const char *path, const char *skip );
extern size_t tags_number( const char *path );

struct cgit_ref_names {
  char **name;
  size_t  len;
};

extern struct cgit_ref_names *cgit_ref_names_new( void );
extern void cgit_ref_names_allocate( struct cgit_ref_names **ref_names );
extern void cgit_ref_names_add( struct cgit_ref_names *names, const char *name );
extern void cgit_ref_names_free( struct cgit_ref_names *names );

extern void lookup_branches_by_prefix( struct cgit_ref_names **ref_names, const char *prefix );
extern void lookup_tags_by_prefix( struct cgit_ref_names **ref_names, const char *prefix );

struct cgit_hex_commits {
  char  **hex;
  size_t  len;
};

extern struct cgit_hex_commits *cgit_hex_commits_new( void );
extern void cgit_hex_commits_allocate( struct cgit_hex_commits **hex_commits );
extern void cgit_hex_commits_add( struct cgit_hex_commits *commits, const char *hex );
extern void cgit_hex_commits_free( struct cgit_hex_commits *commits );

extern void parse_relative_path( char *ref, char *rpath, const char *relative_path );

extern void cgit_fill_commits_list( struct cgit_hex_commits **hex_commits, int ofs, const char *relative_path, const char *revision );

extern git_repository *cgit_open_repository( void );
extern git_commit *lookup_commit_by_ref( const char *ref );
extern git_commit *lookup_commit_by_hex( const char *hex );

extern void cgit_fill_diff_with_parent( struct strbuf *sb, char *parent_hex, size_t parent_len, int *files, int *insertions, int *deletions, const char *hex );
extern void cgit_diff_with_parent( struct strbuf *sb, char *parent_hex, size_t parent_len, int *files, int *insertions, int *deletions, const char *hex, const char *relative_path );


#ifdef __cplusplus
}
#endif

#endif  /* __GIT_SHARED_H */