type Bitbucket = {
username: string;
password: string;
};
/**
* Compare two commits
* Produces a raw git-style diff.
*/
export async function main(
auth: Bitbucket,
repo_slug: string,
spec: string,
workspace: string,
context: string | undefined,
path: string | undefined,
ignore_whitespace: string | undefined,
binary: string | undefined,
renames: string | undefined,
merge: string | undefined,
topic: string | undefined
) {
const url = new URL(
`https://api.bitbucket.org/2.0/repositories/${workspace}/${repo_slug}/diff/${spec}`
);
for (const [k, v] of [
["context", context],
["path", path],
["ignore_whitespace", ignore_whitespace],
["binary", binary],
["renames", renames],
["merge", merge],
["topic", topic],
]) {
if (v !== undefined && v !== "") {
url.searchParams.append(k, v);
}
}
const response = await fetch(url, {
method: "GET",
headers: {
Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
},
body: undefined,
});
if (!response.ok) {
const text = await response.text();
throw new Error(`${response.status} ${text}`);
}
return await response.text();
}
Submitted by hugo697 395 days ago
type Bitbucket = {
username: string;
password: string;
};
/**
* Compare two commits
* Produces a raw git-style diff.
#### Single commit spec
If the `spec` argument to this API is a single commit, the diff is
produced against the first parent of the specified commit.
#### Two commit spec
Two commits separated by `..` may be provided as the `spec`, e.g.,
`3a8b42..9ff173`. When two commits are provided and the `topic` query
parameter is true, this API produces a 2-way three dot diff.
This is the diff between source commit and the merge base of the source
commit and the destination commit. When the `topic` query param is false,
a simple git-style diff is produced.
The two commits are interpreted as follows:
* First commit: the commit containing the changes we wish to preview
* Second commit: the commit representing the state to which we want to
compare the first commit
* **Note**: This is the opposite of the order used in `git diff`.
#### Comparison to patches
While similar to patches, diffs:
* Don't have a commit header (username, commit message, etc)
* Support the optional `path=foo/bar.py` query param to filter
the diff to just that one file diff
#### Response
The raw diff is returned as-is, in whatever encoding the files in the
repository use. It is not decoded into unicode. As such, the
content-type is `text/plain`.
*/
export async function main(
auth: Bitbucket,
repo_slug: string,
spec: string,
workspace: string,
context: string | undefined,
path: string | undefined,
ignore_whitespace: string | undefined,
binary: string | undefined,
renames: string | undefined,
merge: string | undefined,
topic: string | undefined
) {
const url = new URL(
`https://api.bitbucket.org/2.0/repositories/${workspace}/${repo_slug}/diff/${spec}`
);
for (const [k, v] of [
["context", context],
["path", path],
["ignore_whitespace", ignore_whitespace],
["binary", binary],
["renames", renames],
["merge", merge],
["topic", topic],
]) {
if (v !== undefined && v !== "") {
url.searchParams.append(k, v);
}
}
const response = await fetch(url, {
method: "GET",
headers: {
Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
},
body: undefined,
});
if (!response.ok) {
const text = await response.text();
throw new Error(`${response.status} ${text}`);
}
return await response.text();
}
Submitted by hugo697 396 days ago