MCPcopy Create free account
hub / github.com/bytebase/bytebase / ListRevisions

Method ListRevisions

backend/api/v1/revision_service.go:35–94  ·  view source on GitHub ↗
(
	ctx context.Context,
	req *connect.Request[v1pb.ListRevisionsRequest],
)

Source from the content-addressed store, hash-verified

33}
34
35func (s *RevisionService) ListRevisions(
36 ctx context.Context,
37 req *connect.Request[v1pb.ListRevisionsRequest],
38) (*connect.Response[v1pb.ListRevisionsResponse], error) {
39 request := req.Msg
40 instanceID, databaseName, err := common.GetInstanceDatabaseID(request.Parent)
41 if err != nil {
42 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Wrapf(err, "failed to parse %q", request.Parent))
43 }
44 database, err := s.store.GetDatabase(ctx, &store.FindDatabaseMessage{
45 Workspace: common.GetWorkspaceIDFromContext(ctx),
46 InstanceID: &instanceID,
47 DatabaseName: &databaseName,
48 ShowDeleted: true,
49 })
50 if err != nil {
51 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get database"))
52 }
53 if database == nil {
54 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("database %v not found", request.Parent))
55 }
56
57 offset, err := parseLimitAndOffset(&pageSize{
58 token: request.PageToken,
59 limit: int(request.PageSize),
60 maximum: 1000,
61 })
62 if err != nil {
63 return nil, err
64 }
65 limitPlusOne := offset.limit + 1
66
67 find := &store.FindRevisionMessage{
68 InstanceID: database.InstanceID,
69 DatabaseName: &database.DatabaseName,
70 Limit: &limitPlusOne,
71 Offset: &offset.offset,
72 ShowDeleted: request.ShowDeleted,
73 }
74
75 revisions, err := s.store.ListRevisions(ctx, find)
76 if err != nil {
77 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to find revisions"))
78 }
79
80 var nextPageToken string
81 if len(revisions) == limitPlusOne {
82 if nextPageToken, err = offset.getNextPageToken(); err != nil {
83 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get next page token"))
84 }
85 revisions = revisions[:offset.limit]
86 }
87
88 converted := convertToRevisions(request.Parent, database.ProjectID, revisions)
89
90 return connect.NewResponse(&v1pb.ListRevisionsResponse{
91 Revisions: converted,
92 NextPageToken: nextPageToken,

Callers

nothing calls this directly

Calls 8

GetInstanceDatabaseIDFunction · 0.92
parseLimitAndOffsetFunction · 0.85
convertToRevisionsFunction · 0.85
ErrorfMethod · 0.80
getNextPageTokenMethod · 0.80
GetDatabaseMethod · 0.65
ListRevisionsMethod · 0.65

Tested by

no test coverage detected