Skip to content

Commit b548ddf

Browse files
code review changes
1 parent 1096c5f commit b548ddf

21 files changed

Lines changed: 101 additions & 94 deletions

File tree

entity/request.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,10 @@ const (
3636
// Change represents a set of related code changes identified by one or more URIs from a particular code change provider, like Github Pull Requests.
3737
// The object is immutable after creation.
3838
type Change struct {
39-
// Source is the code change provider ID that maps to a registered provider (e.g., "github", "github-enterprise", "phabricator").
40-
Source string `json:"source"`
41-
// URIs is a list of change URIs that should be landed together. The format is provider-specific:
42-
// - GitHub: "owner/repo/pr_number@commit_hash" (e.g., "uber/submitqueue/123@abc123def")
43-
// - Phabricator: "revision_id@commit_hash" (e.g., "D12345@abc123def")
39+
// Provider is the code change provider that maps to a registered provider (e.g., "github", "github-enterprise", "phabricator").
40+
Provider string `json:"provider"`
41+
// URIs is a list of change URIs that should be landed together. The format is determined by the change-provider implementation.
42+
// Default format: "github.com/<org>/<repo>/<pr>/<hash>" (e.g., "github.com/uber/submitqueue/123/abc123def")
4443
URIs []string `json:"uris"`
4544
}
4645

entity/request_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ func TestRequest_ToBytes(t *testing.T) {
1111
req := Request{
1212
ID: "test-queue/123",
1313
Queue: "test-queue",
14-
Change: Change{Source: "github", URIs: []string{"uber/submitqueue/456@abc123def", "uber/submitqueue/789@def456abc"}},
14+
Change: Change{Provider: "github", URIs: []string{"github.com/uber/submitqueue/456/abc123def", "github.com/uber/submitqueue/789/def456abc"}},
1515
LandStrategy: RequestLandStrategyRebase,
1616
State: RequestStateNew,
1717
Version: 1,
@@ -25,7 +25,7 @@ func TestRequest_ToBytes(t *testing.T) {
2525
jsonStr := string(data)
2626
assert.Contains(t, jsonStr, "test-queue/123")
2727
assert.Contains(t, jsonStr, "github")
28-
assert.Contains(t, jsonStr, "uber/submitqueue/456@abc123def")
28+
assert.Contains(t, jsonStr, "github.com/uber/submitqueue/456/abc123def")
2929
assert.Contains(t, jsonStr, "rebase")
3030
assert.Contains(t, jsonStr, "new")
3131
}
@@ -34,7 +34,7 @@ func TestRequestFromBytes(t *testing.T) {
3434
original := Request{
3535
ID: "my-queue/999",
3636
Queue: "my-queue",
37-
Change: Change{Source: "phabricator", URIs: []string{"D111@fedcba987"}},
37+
Change: Change{Provider: "phabricator", URIs: []string{"phabricator.uber.com/D111/fedcba987"}},
3838
LandStrategy: RequestLandStrategyMerge,
3939
State: RequestStateProcessing,
4040
Version: 3,
@@ -51,7 +51,7 @@ func TestRequestFromBytes(t *testing.T) {
5151
// Verify all fields match
5252
assert.Equal(t, original.ID, deserialized.ID)
5353
assert.Equal(t, original.Queue, deserialized.Queue)
54-
assert.Equal(t, original.Change.Source, deserialized.Change.Source)
54+
assert.Equal(t, original.Change.Provider, deserialized.Change.Provider)
5555
assert.Equal(t, original.Change.URIs, deserialized.Change.URIs)
5656
assert.Equal(t, original.LandStrategy, deserialized.LandStrategy)
5757
assert.Equal(t, original.State, deserialized.State)
@@ -89,7 +89,7 @@ func TestRequest_SerializationRoundTrip(t *testing.T) {
8989
req: Request{
9090
ID: "queue1/100",
9191
Queue: "queue1",
92-
Change: Change{Source: "github", URIs: []string{"uber/repo-a/101@aaa111", "uber/repo-a/102@bbb222", "uber/repo-a/103@ccc333"}},
92+
Change: Change{Provider: "github", URIs: []string{"github.com/uber/repo-a/101/aaa111", "github.com/uber/repo-a/102/bbb222", "github.com/uber/repo-a/103/ccc333"}},
9393
LandStrategy: RequestLandStrategySquashRebase,
9494
State: RequestStateLanded,
9595
Version: 5,
@@ -100,7 +100,7 @@ func TestRequest_SerializationRoundTrip(t *testing.T) {
100100
req: Request{
101101
ID: "queue2/200",
102102
Queue: "queue2",
103-
Change: Change{Source: "phabricator", URIs: []string{"D12345@abc123def456"}},
103+
Change: Change{Provider: "phabricator", URIs: []string{"phabricator.uber.com/D12345/abc123def456"}},
104104
LandStrategy: RequestLandStrategyRebase,
105105
State: RequestStateNew,
106106
Version: 1,
@@ -111,7 +111,7 @@ func TestRequest_SerializationRoundTrip(t *testing.T) {
111111
req: Request{
112112
ID: "queue3/300",
113113
Queue: "queue3",
114-
Change: Change{Source: "github-enterprise", URIs: []string{"internal/service/999@deadbeef12"}},
114+
Change: Change{Provider: "github-enterprise", URIs: []string{"github.uber.com/internal/service/999/deadbeef12"}},
115115
LandStrategy: RequestLandStrategyMerge,
116116
State: RequestStateError,
117117
Version: 10,

extension/change_provider/change_provider.go

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package changeprovider
2+
3+
import "context"
4+
5+
// User represents the author of a change.
6+
type User struct {
7+
// Name is the display name of the user.
8+
Name string
9+
// Email is the email address of the user.
10+
Email string
11+
}
12+
13+
// ChangedFile represents a single file modification in a change.
14+
type ChangedFile struct {
15+
// Path is the file path relative to the repository root.
16+
Path string
17+
// Patch is the diff patch content for this file.
18+
Patch string
19+
// LinesAdded is the number of lines added in this file.
20+
LinesAdded int
21+
// LinesDeleted is the number of lines deleted in this file.
22+
LinesDeleted int
23+
// LinesModified is the number of lines modified in this file.
24+
LinesModified int
25+
}
26+
27+
// ChangeInfo contains metadata and file changes for a code change.
28+
type ChangeInfo struct {
29+
// ID is the change identifier (e.g., "PR: uber-code/go-code/1" or "diff: uber-code/go-code/D1").
30+
ID string
31+
// User is the author of the change.
32+
User User
33+
// ChangedFiles is the list of files modified in this change.
34+
ChangedFiles []ChangedFile
35+
}
36+
37+
// ChangeProvider fetches change information from external code review providers.
38+
// Each implementation is configured for a specific provider (GitHub, GitLab, Phabricator).
39+
type ChangeProvider interface {
40+
// Get retrieves change information for the provided URIs.
41+
// The URI format is determined by the implementation.
42+
// Default format: "github.com/<org>/<repo>/<pr>/<hash>" (e.g., "github.com/uber/submitqueue/123/abc123def")
43+
// Returns the change info containing metadata and file changes.
44+
Get(ctx context.Context, uris []string) (ChangeInfo, error)
45+
}

extension/storage/mysql/request_store.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func (r *requestStore) Get(ctx context.Context, id string) (entity.Request, erro
3030
err := r.db.QueryRowContext(ctx,
3131
"SELECT id, queue, change_source, change_uris, land_strategy, state, version FROM request WHERE id = ?",
3232
id,
33-
).Scan(&req.ID, &req.Queue, &req.Change.Source, &changeURIsJSON, &req.LandStrategy, &req.State, &req.Version)
33+
).Scan(&req.ID, &req.Queue, &req.Change.Provider, &changeURIsJSON, &req.LandStrategy, &req.State, &req.Version)
3434

3535
if errors.Is(err, sql.ErrNoRows) {
3636
return entity.Request{}, storage.WrapNotFound(err)
@@ -55,7 +55,7 @@ func (r *requestStore) Create(ctx context.Context, request entity.Request) error
5555

5656
_, err = r.db.ExecContext(ctx,
5757
"INSERT INTO request (id, queue, change_source, change_uris, land_strategy, state, version) VALUES (?, ?, ?, ?, ?, ?, ?)",
58-
request.ID, request.Queue, request.Change.Source, changeURIsJSON, request.LandStrategy, request.State, request.Version,
58+
request.ID, request.Queue, request.Change.Provider, changeURIsJSON, request.LandStrategy, request.State, request.Version,
5959
)
6060
if err != nil {
6161
var mysqlErr *mysql.MySQLError

gateway/controller/land.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ func (c *LandController) Land(ctx context.Context, req *pb.LandRequest) (*pb.Lan
6969
}
7070

7171
change := entity.Change{
72-
Source: req.Change.GetSource(),
73-
URIs: req.Change.GetUris(),
72+
Provider: req.Change.GetSource(),
73+
URIs: req.Change.GetUris(),
7474
}
7575

7676
// TODO: validate that queue is configured. Return error if not.
@@ -104,7 +104,7 @@ func (c *LandController) Land(ctx context.Context, req *pb.LandRequest) (*pb.Lan
104104
c.logger.Debugw("land request created",
105105
"queue", req.Queue,
106106
"sqid", request.ID,
107-
"change_source", change.Source,
107+
"change_source", change.Provider,
108108
"change_uris", change.URIs,
109109
"strategy", string(strategy),
110110
)

gateway/controller/land_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ func TestLand_ReturnsSqid(t *testing.T) {
216216

217217
req := &pb.LandRequest{
218218
Queue: "test-queue",
219-
Change: &pb.Change{Source: "github", Uris: []string{"uber/test-repo/123@abc123def"}},
219+
Change: &pb.Change{Source: "github", Uris: []string{"github.com/uber/test-repo/123/abc123def"}},
220220
}
221221
resp, err := controller.Land(ctx, req)
222222

@@ -248,16 +248,16 @@ func TestLand_PassesCorrectParametersToStore(t *testing.T) {
248248

249249
req := &pb.LandRequest{
250250
Queue: "my-queue",
251-
Change: &pb.Change{Source: "github", Uris: []string{"uber/myservice/1@abc111", "uber/myservice/2@def222"}},
251+
Change: &pb.Change{Source: "github", Uris: []string{"github.com/uber/myservice/1/abc111", "github.com/uber/myservice/2/def222"}},
252252
Strategy: pb.Strategy_REBASE,
253253
}
254254
resp, err := controller.Land(ctx, req)
255255

256256
require.NoError(t, err)
257257
assert.Equal(t, "my-queue/42", capturedRequest.ID)
258258
assert.Equal(t, "my-queue", capturedRequest.Queue)
259-
assert.Equal(t, "github", capturedRequest.Change.Source)
260-
assert.Equal(t, []string{"uber/myservice/1@abc111", "uber/myservice/2@def222"}, capturedRequest.Change.URIs)
259+
assert.Equal(t, "github", capturedRequest.Change.Provider)
260+
assert.Equal(t, []string{"github.com/uber/myservice/1/abc111", "github.com/uber/myservice/2/def222"}, capturedRequest.Change.URIs)
261261
assert.Equal(t, entity.RequestLandStrategyRebase, capturedRequest.LandStrategy)
262262
assert.Equal(t, entity.RequestStateNew, capturedRequest.State)
263263
assert.Equal(t, int32(1), capturedRequest.Version)
@@ -285,7 +285,7 @@ func TestLand_ReturnsErrorOnStorageFailure(t *testing.T) {
285285

286286
req := &pb.LandRequest{
287287
Queue: "test-queue",
288-
Change: &pb.Change{Source: "github", Uris: []string{"uber/test-repo/123@abc123def"}},
288+
Change: &pb.Change{Source: "github", Uris: []string{"github.com/uber/test-repo/123/abc123def"}},
289289
}
290290
_, err := controller.Land(ctx, req)
291291

@@ -313,7 +313,7 @@ func TestLand_ReturnsErrorOnCounterFailure(t *testing.T) {
313313

314314
req := &pb.LandRequest{
315315
Queue: "test-queue",
316-
Change: &pb.Change{Source: "github", Uris: []string{"uber/test-repo/123@abc123def"}},
316+
Change: &pb.Change{Source: "github", Uris: []string{"github.com/uber/test-repo/123/abc123def"}},
317317
}
318318
_, err := controller.Land(ctx, req)
319319

@@ -344,7 +344,7 @@ func TestLand_CounterDomainIncludesQueue(t *testing.T) {
344344

345345
req := &pb.LandRequest{
346346
Queue: "my-queue",
347-
Change: &pb.Change{Source: "github", Uris: []string{"uber/test-repo/123@abc123def"}},
347+
Change: &pb.Change{Source: "github", Uris: []string{"github.com/uber/test-repo/123/abc123def"}},
348348
}
349349
_, err := controller.Land(ctx, req)
350350

@@ -366,7 +366,7 @@ func TestLand_ReturnsErrorOnEmptyQueue(t *testing.T) {
366366

367367
req := &pb.LandRequest{
368368
Queue: "",
369-
Change: &pb.Change{Source: "github", Uris: []string{"uber/test-repo/123@abc123def"}},
369+
Change: &pb.Change{Source: "github", Uris: []string{"github.com/uber/test-repo/123/abc123def"}},
370370
}
371371
_, err := controller.Land(ctx, req)
372372

@@ -388,7 +388,7 @@ func TestLand_ReturnsErrorOnEmptyChangeSource(t *testing.T) {
388388

389389
req := &pb.LandRequest{
390390
Queue: "test-queue",
391-
Change: &pb.Change{Source: "", Uris: []string{"uber/test-repo/123@abc123def"}},
391+
Change: &pb.Change{Source: "", Uris: []string{"github.com/uber/test-repo/123/abc123def"}},
392392
}
393393
_, err := controller.Land(ctx, req)
394394

@@ -463,7 +463,7 @@ func TestLand_PublishesToQueue(t *testing.T) {
463463

464464
req := &pb.LandRequest{
465465
Queue: "test-queue",
466-
Change: &pb.Change{Source: "github", Uris: []string{"uber/backend/456@fed987cba"}},
466+
Change: &pb.Change{Source: "github", Uris: []string{"github.com/uber/backend/456/fed987cba"}},
467467
Strategy: pb.Strategy_REBASE,
468468
}
469469
resp, err := controller.Land(ctx, req)
@@ -481,8 +481,8 @@ func TestLand_PublishesToQueue(t *testing.T) {
481481
require.NoError(t, err)
482482
assert.Equal(t, "test-queue/123", deserializedReq.ID)
483483
assert.Equal(t, "test-queue", deserializedReq.Queue)
484-
assert.Equal(t, "github", deserializedReq.Change.Source)
485-
assert.Equal(t, []string{"uber/backend/456@fed987cba"}, deserializedReq.Change.URIs)
484+
assert.Equal(t, "github", deserializedReq.Change.Provider)
485+
assert.Equal(t, []string{"github.com/uber/backend/456/fed987cba"}, deserializedReq.Change.URIs)
486486
assert.Equal(t, entity.RequestLandStrategyRebase, deserializedReq.LandStrategy)
487487
assert.Equal(t, entity.RequestStateNew, deserializedReq.State)
488488
assert.Equal(t, int32(1), deserializedReq.Version)
@@ -506,7 +506,7 @@ func TestLand_ContinuesWhenPublishFails(t *testing.T) {
506506

507507
req := &pb.LandRequest{
508508
Queue: "test-queue",
509-
Change: &pb.Change{Source: "github", Uris: []string{"uber/service/1@abc123def"}},
509+
Change: &pb.Change{Source: "github", Uris: []string{"github.com/uber/service/1/abc123def"}},
510510
}
511511
_, err := controller.Land(ctx, req)
512512

gateway/proto/gateway.proto

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,8 @@ enum Strategy {
4545
message Change {
4646
// The code change provider ID that maps to a registered provider (e.g., "github", "github-enterprise", "phabricator").
4747
string source = 1;
48-
// List of change URIs that should be landed together. The format is provider-specific:
49-
// - GitHub: "owner/repo/pr_number@commit_hash" (e.g., "uber/submitqueue/123@abc123def")
50-
// - Phabricator: "revision_id@commit_hash" (e.g., "D12345@abc123def")
48+
// List of change URIs that should be landed together. The format is determined by the change-provider implementation.
49+
// Default format: "github.com/<org>/<repo>/<pr>/<hash>" (e.g., "github.com/uber/submitqueue/123/abc123def")
5150
// SubmitQueue guarantees that the changes are landed in the order of the list, and no other changes are landed in between.
5251
// SubmitQueue does not guarantee that each change is individually valid, but produces a special validity marker on such changes.
5352
// The user is responsible to include all changes in a change stack in the order of the list, starting from the earliest change.

gateway/protopb/gateway.pb.go

Lines changed: 3 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

orchestrator/controller/batch/batch_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func TestController_Process_Success(t *testing.T) {
5757
request := entity.Request{
5858
ID: "test-queue/123",
5959
Queue: "test-queue",
60-
Change: entity.Change{Source: "github", URIs: []string{"uber/service/456@abc123def"}},
60+
Change: entity.Change{Provider: "github", URIs: []string{"github.com/uber/service/456/abc123def"}},
6161
LandStrategy: entity.RequestLandStrategyRebase,
6262
State: entity.RequestStateNew,
6363
Version: 1,
@@ -100,7 +100,7 @@ func TestController_Process_PublishFailure(t *testing.T) {
100100
request := entity.Request{
101101
ID: "test-queue/123",
102102
Queue: "test-queue",
103-
Change: entity.Change{Source: "github", URIs: []string{"uber/service/1@xyz789abc"}},
103+
Change: entity.Change{Provider: "github", URIs: []string{"github.com/uber/service/1/xyz789abc"}},
104104
LandStrategy: entity.RequestLandStrategyRebase,
105105
State: entity.RequestStateNew,
106106
Version: 1,

0 commit comments

Comments
 (0)