Commit 594c9fd9 authored by Цуцарин Николай Николаевич's avatar Цуцарин Николай Николаевич Committed by Nicholas Bailey
Browse files

api/projects: add an endpoint for getting raw file

parent d390ddfb
Pipeline #200221 failed with stages
in 8 minutes and 2 seconds
# (unreleased) v0.1305.1
## Additions
- Added `gitlab::api::projects::repository::files::FileRaw`
# v0.1305.0
## Additions
......
......@@ -102,6 +102,7 @@ These API endpoints have been implemented.
* `POST /projects/:project/repository/commits/:sha/comments` `projects/repository/commits/comment.rs`
* `GET /projects/:project/repository/commits/:sha/statuses` `projects/repository/commits/statuses.rs`
* `POST /projects/:project/repository/files/*file_path` `projects/repository/files/create.rs`
* `GET /projects/:project/repository/files/*file_path/raw` `projects/repository/files/file_raw.rs`
* `GET /projects/:project/statuses/:sha` `projects/repository/commits/create_status.rs`
Arguably, this should be `POST /projects/:project/repository/commits/:sha/statuses`.
https://gitlab.com/gitlab-org/gitlab/-/issues/217412
......@@ -285,7 +286,6 @@ instead of having to search the page for missing endpoints.
* `GET /projects/:project/repository/files/*file_path` https://gitlab.kitware.com/help/api/repository_files.md#get-file-from-repository
* `HEAD /projects/:project/repository/files/*file_path` https://gitlab.kitware.com/help/api/repository_files.md#get-file-from-repository
* `GET /projects/:project/repository/files/*file_path/blame` https://gitlab.kitware.com/help/api/repository_files.md#get-file-blame-from-repository
* `GET /projects/:project/repository/files/*file_path/raw` https://gitlab.kitware.com/help/api/repository_files.md#get-raw-file-from-repository
* `PUT /projects/:project/repository/files/*file_path` https://gitlab.kitware.com/help/api/repository_files.md#update-existing-file-in-repository
* `DELETE /projects/:project/repository/files/*file_path` https://gitlab.kitware.com/help/api/repository_files.md#delete-existing-file-in-repository
* `DELETE /projects/:project/repository/merged_branches` https://gitlab.kitware.com/help/api/branches.md#delete-merged-branches
......
......@@ -9,7 +9,11 @@
//! These endpoints are used for querying a project's files.
mod create;
mod file_raw;
pub use self::create::CreateFile;
pub use self::create::CreateFileBuilder;
pub use self::create::Encoding;
pub use self::file_raw::FileRaw;
pub use self::file_raw::FileRawBuilder;
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use derive_builder::Builder;
use crate::api::common::{self, NameOrId};
use crate::api::endpoint_prelude::*;
/// Get raw file from repository.
#[derive(Debug, Builder)]
pub struct FileRaw<'a> {
/// The project to get a file within.
#[builder(setter(into))]
project: NameOrId<'a>,
/// The path to the file in the repository.
///
/// This is automatically escaped as needed.
#[builder(setter(into))]
file_path: Cow<'a, str>,
/// The ref to get a file from.
#[builder(setter(into))]
ref_: Cow<'a, str>,
}
impl<'a> FileRaw<'a> {
/// Create a builder for the endpoint.
pub fn builder() -> FileRawBuilder<'a> {
FileRawBuilder::default()
}
}
impl<'a> Endpoint for FileRaw<'a> {
fn method(&self) -> Method {
Method::GET
}
fn endpoint(&self) -> Cow<'static, str> {
format!(
"projects/{}/repository/files/{}/raw",
self.project,
common::path_escaped(&self.file_path),
)
.into()
}
fn parameters(&self) -> QueryParams {
let mut params = QueryParams::default();
params.push("ref", &self.ref_);
params
}
}
#[cfg(test)]
mod tests {
use http::Method;
use crate::api::projects::repository::files::FileRaw;
use crate::api::{self, Query};
use crate::test::client::{ExpectedUrl, SingleTestClient};
#[test]
fn all_parameters_are_needed() {
let err = FileRaw::builder().build().unwrap_err();
assert_eq!(err, "`project` must be initialized");
}
#[test]
fn project_is_required() {
let err = FileRaw::builder()
.file_path("new/file")
.ref_("master")
.build()
.unwrap_err();
assert_eq!(err, "`project` must be initialized");
}
#[test]
fn file_path_is_required() {
let err = FileRaw::builder()
.project(1)
.ref_("master")
.build()
.unwrap_err();
assert_eq!(err, "`file_path` must be initialized");
}
#[test]
fn ref_is_required() {
let err = FileRaw::builder()
.project(1)
.file_path("new/file")
.build()
.unwrap_err();
assert_eq!(err, "`ref_` must be initialized");
}
#[test]
fn sufficient_parameters() {
FileRaw::builder()
.project(1)
.file_path("new/file")
.ref_("master")
.build()
.unwrap();
}
#[test]
fn endpoint() {
let endpoint = ExpectedUrl::builder()
.method(Method::GET)
.endpoint("projects/simple%2Fproject/repository/files/path%2Fto%2Ffile/raw")
.add_query_params(&[("ref", "branch")])
.build()
.unwrap();
let client = SingleTestClient::new_raw(endpoint, "");
let endpoint = FileRaw::builder()
.project("simple/project")
.file_path("path/to/file")
.ref_("branch")
.build()
.unwrap();
api::ignore(endpoint).query(&client).unwrap();
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment