AmendHub

Download

jcs

/

amend

/

repo.h

 

(View History)

jcs   browser: Tweak menu language, fix bug in amendment exporting Latest amendment: 107 on 2022-11-10

1 /*
2 * Copyright (c) 2021 joshua stein <jcs@jcs.org>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17 #ifndef __REPO_H__
18 #define __REPO_H__
19
20 #include <time.h>
21 #include "bile.h"
22
23 #define AMEND_CREATOR 'AMND'
24
25 #define REPO_TYPE 'AMRP'
26
27 #define REPO_FILE_RTYPE 'AFIL'
28 #define REPO_AMENDMENT_RTYPE 'CMMT'
29 #define REPO_DIFF_RTYPE 'DIFF'
30 #define REPO_TEXT_RTYPE 'TEXT'
31 #define REPO_VERS_RTYPE 'RVER'
32
33 #define DIFF_FILE_TYPE 'TEXT'
34
35 #define REPO_DIFF_TOO_BIG "\r[ Diff too large to view, %lu bytes not shown ]"
36
37 #define REPO_CUR_VERS 3
38
39 struct repo_file {
40 short id;
41 char filename[256];
42 OSType type;
43 OSType creator;
44 unsigned long ctime;
45 unsigned long mtime;
46 unsigned char flags;
47 #define REPO_FILE_DELETED (1 << 0)
48 };
49
50 struct repo_file_attrs {
51 char type[4];
52 char creator[4];
53 unsigned long ctime;
54 unsigned long mtime;
55 };
56
57 struct diffed_file {
58 struct repo_file *file;
59 short flags;
60 #define DIFFED_FILE_TEXT (1 << 0)
61 #define DIFFED_FILE_METADATA (1 << 1)
62 };
63
64 struct repo_amendment {
65 short id;
66 time_t date;
67 char author[32];
68 short nfiles;
69 short *file_ids;
70 short adds;
71 short subs;
72 short log_len;
73 Handle log;
74 };
75
76 struct repo {
77 struct bile *bile;
78 short nfiles;
79 struct repo_file **files;
80 short next_file_id;
81 short namendments;
82 struct repo_amendment **amendments;
83 short next_amendment_id;
84 };
85
86 struct repo *repo_open(AppFile *file);
87 struct repo *repo_create(void);
88 void repo_close(struct repo *repo);
89 struct repo_amendment *repo_parse_amendment(unsigned long id, unsigned char *data,
90 size_t size);
91 struct repo_file * repo_parse_file(unsigned long id, unsigned char *data,
92 size_t size);
93 struct repo_file *repo_file_with_id(struct repo *repo, short id);
94 void repo_show_diff_text(struct repo *repo, struct repo_amendment *amendment,
95 TEHandle te);
96 struct repo_file *repo_add_file(struct repo *repo);
97 void repo_file_mark_for_deletion(struct repo *repo, struct repo_file *file);
98 short repo_diff_file(struct repo *repo, struct repo_file *file);
99 short repo_file_changed(struct repo *repo, struct repo_file *file);
100 short repo_checkout_file(struct repo *repo, struct repo_file *file,
101 short vrefnum, Str255 filename);
102 void repo_export_amendment(struct repo *repo,
103 struct repo_amendment *amendment, short vrefnum, Str255 filename);
104 void repo_amend(struct repo *repo, struct diffed_file *diffed_files,
105 short nfiles, short adds, short subs, char *author, Handle log,
106 short loglen, Handle diff, unsigned long difflen);
107 void repo_marshall_amendment(struct repo_amendment *amendment,
108 char **retdata, unsigned long *retlen);
109 void repo_backup(struct repo *repo);
110
111 #endif