@@ -83,7 +83,7 @@ of indirection defined by `Vcs` trait.
83
83
84
84
## Components
85
85
86
- The ` radicle-surf ` library can split into a few main components for
86
+ The ` radicle-surf ` library can be split into a few main components for
87
87
browsing a ` git ` repository, each of which will be discussed in the
88
88
following subsections.
89
89
@@ -92,6 +92,67 @@ be the final form or signature of the functions themselves. The traits
92
92
defined are recommendations, but other solutions for these
93
93
representations may be discovered during implementation of this design.
94
94
95
+ ### Revisions
96
+
97
+ Before describing the next components, it is important to first
98
+ describe [ revisions] [ git-revisions ] . A revision in ` git ` is a way of
99
+ specifying an ` Oid ` . This can be done in a multitude of ways. One can
100
+ also specify a range of ` Oid ` s (think ` git log ` ). The API will support
101
+ taking revisions as parameters where an ` Oid ` is expected. It will
102
+ not, however, permit ranges (at least for the time being) and so a
103
+ revision will be scoped to any string that can resolve to a single
104
+ ` Oid ` , e.g. an ` Oid ` string itself, a reference name, ` @{date} ` , etc.
105
+ The aim will be to have a trait similar to:
106
+
107
+
108
+ ``` rust
109
+ /// `Self` is expected to be a type that can resolve to a single
110
+ /// `Oid`.
111
+ ///
112
+ /// An `Oid` is the trivial case and returns itself, and is
113
+ /// infallible.
114
+ ///
115
+ /// However, some other revisions require parsing and/or looking at the
116
+ /// storage, which may result in an `Error`.
117
+ pub trait FromRevision {
118
+ type Error ;
119
+
120
+ /// Resolve the revision to its `Oid`, if possible.
121
+ fn peel (& self , storage : & Storage ) -> Result <Oid , Self :: Error >;
122
+ }
123
+ ```
124
+
125
+ #### Commit-ish
126
+
127
+ The snapshot mentioned above is a ` Commit ` in ` git ` , where the
128
+ commit points to a ` Tree ` object. Thus, the API should be able to take
129
+ any parameter that may resolve to a ` Commit ` . This idea can be
130
+ captured as a trait, similar to ` FromRevision ` , which allows something
131
+ to be peeled to a ` Commit ` .
132
+
133
+ ``` rust
134
+ /// `Self` is expected to be a type that can resolve to a single
135
+ /// `Commit`.
136
+ ///
137
+ /// A `Commit` is the trivial case and returns itself, and is
138
+ /// infallible.
139
+ ///
140
+ /// However, some other kinds of data require parsing and/or looking at the
141
+ /// storage, which may result in an `Error`.
142
+ ///
143
+ /// Common cases are:
144
+ ///
145
+ /// * Reference that points to a commit `Oid`.
146
+ /// * A `Tag` that has a `target` of `Commit`.
147
+ /// * An `Oid` that is the identifier for a particular `Commit`.
148
+ pub trait Commitish {
149
+ type Error ;
150
+
151
+ /// Resolve the type to its `Commit`, if possible.
152
+ fn peel (& self , storage : & Storage ) -> Result <Commit , Self :: Error >;
153
+ }
154
+ ```
155
+
95
156
### References
96
157
97
158
Many are familiar with ` git ` branches. They are the main point of
@@ -148,35 +209,6 @@ to avoid retrieving the actual object to limit the amount of data
148
209
needed. The ` Oid ` is the minimal amount of information required to
149
210
fetch the object itself.
150
211
151
- ### Revisions
152
-
153
- Before describing the next components, it is important to first
154
- describe [ revisions] [ git-revisions ] . A revision in ` git ` is a way of
155
- specifying an ` Oid ` . This can be done in a multitude of ways. One can
156
- also specify a range of ` Oid ` s (think ` git log ` ). The API will support
157
- taking revisions as parameters where an ` Oid ` is expected. It will
158
- not, however, permit ranges (at least for the time being) and so a
159
- revision will be scoped to any string that can resolve to a single
160
- ` Oid ` , e.g. an ` Oid ` string itself, a reference name, ` @{date} ` , etc.
161
- The aim will be to have a trait similar to:
162
-
163
- ``` rust
164
- /// `Self` is expected to be a type that can resolve to a single
165
- /// `Oid`.
166
- ///
167
- /// An `Oid` is the trivial case and returns itself, and is
168
- /// infallible.
169
- ///
170
- /// However, some other revisions require parsing and/or looking at the
171
- /// storage, which may result in an `Error`.
172
- pub trait FromRevision {
173
- type Error ;
174
-
175
- /// Resolve the revision to its `Oid`, if possible.
176
- fn peel (& self , storage : & Storage ) -> Result <Oid , Self :: Error >;
177
- }
178
- ```
179
-
180
212
### Objects
181
213
182
214
Within the ` git ` model, [ references] [ #References ] point to
@@ -213,36 +245,7 @@ time. Generally, this object would be a `Tree`, i.e. a directory of
213
245
files. However, it may be that a particular file, i.e. ` Blob ` , can be
214
246
viewed.
215
247
216
- #### Commit-ish
217
-
218
- The snapshot mentioned above is a ` Commit ` in ` git ` , where the
219
- commit points to a ` Tree ` object. Thus, the API should be able to take
220
- any parameter that may resolve to a ` Commit ` . This idea can be
221
- captured as a trait, similar to ` FromRevision ` , which allows something
222
- to be peeled to a ` Commit ` .
223
-
224
- ``` rust
225
- /// `Self` is expected to be a type that can resolve to a single
226
- /// `Commit`.
227
- ///
228
- /// A `Commit` is the trivial case and returns itself, and is
229
- /// infallible.
230
- ///
231
- /// However, some other kinds of data require parsing and/or looking at the
232
- /// storage, which may result in an `Error`.
233
- ///
234
- /// Common cases are:
235
- ///
236
- /// * Reference that points to a commit `Oid`.
237
- /// * A `Tag` that has a `target` of `Commit`.
238
- /// * An `Oid` that is the identifier for a particular `Commit`.
239
- pub trait Commitish {
240
- type Error ;
241
-
242
- /// Resolve the type to its `Commit`, if possible.
243
- fn peel (& self , storage : & Storage ) -> Result <Commit , Self :: Error >;
244
- }
245
- ```
248
+ ### Directories anf Files
246
249
247
250
This provides the building blocks for defining common cases of viewing
248
251
files and directories given a ` Commitish ` type.
0 commit comments