mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-09 15:05:44 +01:00
Merge with 2.0.0-m3
This commit is contained in:
@@ -17,7 +17,7 @@ public class ConcurrentModificationException extends ExceptionWithContext {
|
|||||||
this(Collections.singletonList(new ContextEntry(type, id)));
|
this(Collections.singletonList(new ContextEntry(type, id)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConcurrentModificationException(List<ContextEntry> context) {
|
public ConcurrentModificationException(List<ContextEntry> context) {
|
||||||
super(context, createMessage(context));
|
super(context, createMessage(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,3 +32,4 @@ public class ConcurrentModificationException extends ExceptionWithContext {
|
|||||||
.collect(joining(" in ", "", " has been modified concurrently"));
|
.collect(joining(" in ", "", " has been modified concurrently"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -213,8 +213,14 @@ public class GitBrowseCommand extends AbstractGitCommand
|
|||||||
|
|
||||||
if (lfsPointer.isPresent()) {
|
if (lfsPointer.isPresent()) {
|
||||||
BlobStore lfsBlobStore = lfsBlobStoreFactory.getLfsBlobStore(repository);
|
BlobStore lfsBlobStore = lfsBlobStoreFactory.getLfsBlobStore(repository);
|
||||||
Blob blob = lfsBlobStore.get(lfsPointer.get().getOid().getName());
|
String oid = lfsPointer.get().getOid().getName();
|
||||||
file.setLength(blob.getSize());
|
Blob blob = lfsBlobStore.get(oid);
|
||||||
|
if (blob == null) {
|
||||||
|
logger.error("lfs blob for lob id {} not found in lfs store of repository {}", oid, repository.getNamespaceAndName());
|
||||||
|
file.setLength(-1);
|
||||||
|
} else {
|
||||||
|
file.setLength(blob.getSize());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
file.setLength(loader.getSize());
|
file.setLength(loader.getSize());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,7 +145,12 @@ public class GitCatCommand extends AbstractGitCommand implements CatCommand {
|
|||||||
|
|
||||||
private Loader loadFromLfsStore(TreeWalk treeWalk, RevWalk revWalk, LfsPointer lfsPointer) throws IOException {
|
private Loader loadFromLfsStore(TreeWalk treeWalk, RevWalk revWalk, LfsPointer lfsPointer) throws IOException {
|
||||||
BlobStore lfsBlobStore = lfsBlobStoreFactory.getLfsBlobStore(repository);
|
BlobStore lfsBlobStore = lfsBlobStoreFactory.getLfsBlobStore(repository);
|
||||||
Blob blob = lfsBlobStore.get(lfsPointer.getOid().getName());
|
String oid = lfsPointer.getOid().getName();
|
||||||
|
Blob blob = lfsBlobStore.get(oid);
|
||||||
|
if (blob == null) {
|
||||||
|
logger.error("lfs blob for lob id {} not found in lfs store of repository {}", oid, repository.getNamespaceAndName());
|
||||||
|
throw notFound(entity("LFS", oid).in(repository));
|
||||||
|
}
|
||||||
GitUtil.release(revWalk);
|
GitUtil.release(revWalk);
|
||||||
GitUtil.release(treeWalk);
|
GitUtil.release(treeWalk);
|
||||||
return new BlobLoader(blob);
|
return new BlobLoader(blob);
|
||||||
|
|||||||
@@ -77,7 +77,9 @@ public class HgBrowseCommand extends AbstractCommand implements BrowseCommand
|
|||||||
String revision = MoreObjects.firstNonNull(request.getRevision(), "tip");
|
String revision = MoreObjects.firstNonNull(request.getRevision(), "tip");
|
||||||
Changeset c = LogCommand.on(getContext().open()).rev(revision).limit(1).single();
|
Changeset c = LogCommand.on(getContext().open()).rev(revision).limit(1).single();
|
||||||
|
|
||||||
cmd.rev(c.getNode());
|
if (c != null) {
|
||||||
|
cmd.rev(c.getNode());
|
||||||
|
}
|
||||||
|
|
||||||
if (!Strings.isNullOrEmpty(request.getPath()))
|
if (!Strings.isNullOrEmpty(request.getPath()))
|
||||||
{
|
{
|
||||||
@@ -100,6 +102,6 @@ public class HgBrowseCommand extends AbstractCommand implements BrowseCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
FileObject file = cmd.execute();
|
FileObject file = cmd.execute();
|
||||||
return new BrowserResult(c.getNode(), revision, file);
|
return new BrowserResult(c == null? "tip": c.getNode(), revision, file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class ApiClient {
|
|||||||
return fetch(createUrl(url), applyFetchOptions({})).then(handleFailure);
|
return fetch(createUrl(url), applyFetchOptions({})).then(handleFailure);
|
||||||
}
|
}
|
||||||
|
|
||||||
post(url: string, payload: any, contentType = "application/json") {
|
post(url: string, payload?: any, contentType = "application/json") {
|
||||||
return this.httpRequestWithJSONBody("POST", url, contentType, payload);
|
return this.httpRequestWithJSONBody("POST", url, contentType, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,11 +115,13 @@ class ApiClient {
|
|||||||
return fetch(createUrl(url), options).then(handleFailure);
|
return fetch(createUrl(url), options).then(handleFailure);
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRequestWithJSONBody(method: string, url: string, contentType: string, payload: any): Promise<Response> {
|
httpRequestWithJSONBody(method: string, url: string, contentType: string, payload?: any): Promise<Response> {
|
||||||
const options: RequestInit = {
|
const options: RequestInit = {
|
||||||
method: method,
|
method: method
|
||||||
body: JSON.stringify(payload)
|
|
||||||
};
|
};
|
||||||
|
if (payload) {
|
||||||
|
options.body = JSON.stringify(payload);
|
||||||
|
}
|
||||||
return this.httpRequestWithBinaryBody(options, url, contentType);
|
return this.httpRequestWithBinaryBody(options, url, contentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ export type ButtonProps = {
|
|||||||
|
|
||||||
type Props = ButtonProps &
|
type Props = ButtonProps &
|
||||||
RouteComponentProps & {
|
RouteComponentProps & {
|
||||||
|
title?: string;
|
||||||
type?: "button" | "submit" | "reset";
|
type?: "button" | "submit" | "reset";
|
||||||
color?: string;
|
color?: string;
|
||||||
};
|
};
|
||||||
@@ -38,7 +39,19 @@ class Button extends React.Component<Props> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { label, loading, disabled, type, color, className, icon, fullWidth, reducedMobile, children } = this.props;
|
const {
|
||||||
|
label,
|
||||||
|
title,
|
||||||
|
loading,
|
||||||
|
disabled,
|
||||||
|
type,
|
||||||
|
color,
|
||||||
|
className,
|
||||||
|
icon,
|
||||||
|
fullWidth,
|
||||||
|
reducedMobile,
|
||||||
|
children
|
||||||
|
} = this.props;
|
||||||
const loadingClass = loading ? "is-loading" : "";
|
const loadingClass = loading ? "is-loading" : "";
|
||||||
const fullWidthClass = fullWidth ? "is-fullwidth" : "";
|
const fullWidthClass = fullWidth ? "is-fullwidth" : "";
|
||||||
const reducedMobileClass = reducedMobile ? "is-reduced-mobile" : "";
|
const reducedMobileClass = reducedMobile ? "is-reduced-mobile" : "";
|
||||||
@@ -46,6 +59,7 @@ class Button extends React.Component<Props> {
|
|||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
type={type}
|
type={type}
|
||||||
|
title={title}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
onClick={this.onClick}
|
onClick={this.onClick}
|
||||||
className={classNames("button", "is-" + color, loadingClass, fullWidthClass, reducedMobileClass, className)}
|
className={classNames("button", "is-" + color, loadingClass, fullWidthClass, reducedMobileClass, className)}
|
||||||
@@ -63,6 +77,7 @@ class Button extends React.Component<Props> {
|
|||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
type={type}
|
type={type}
|
||||||
|
title={title}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
onClick={this.onClick}
|
onClick={this.onClick}
|
||||||
className={classNames("button", "is-" + color, loadingClass, fullWidthClass, className)}
|
className={classNames("button", "is-" + color, loadingClass, fullWidthClass, className)}
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ const buttonStory = (name: string, storyFn: () => ReactElement) => {
|
|||||||
.addDecorator(SpacingDecorator)
|
.addDecorator(SpacingDecorator)
|
||||||
.add("Default", storyFn);
|
.add("Default", storyFn);
|
||||||
};
|
};
|
||||||
|
|
||||||
buttonStory("AddButton", () => <AddButton>Add</AddButton>);
|
buttonStory("AddButton", () => <AddButton>Add</AddButton>);
|
||||||
buttonStory("CreateButton", () => <CreateButton>Create</CreateButton>);
|
buttonStory("CreateButton", () => <CreateButton>Create</CreateButton>);
|
||||||
buttonStory("DeleteButton", () => <DeleteButton>Delete</DeleteButton>);
|
buttonStory("DeleteButton", () => <DeleteButton>Delete</DeleteButton>);
|
||||||
|
|||||||
Reference in New Issue
Block a user