Start cleaning up fork.go

This commit is contained in:
Anthony Wang 2022-07-27 10:24:04 -05:00
parent 38a687c60e
commit f0cded88bf
No known key found for this signature in database
GPG Key ID: BC96B00AEC5F2D76
3 changed files with 47 additions and 20 deletions

View File

@ -6,12 +6,10 @@ package activitypub
import ( import (
"context" "context"
"strings"
"code.gitea.io/gitea/models/forgefed" "code.gitea.io/gitea/models/forgefed"
repo_model "code.gitea.io/gitea/models/repo" repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/services/migrations" "code.gitea.io/gitea/services/migrations"
repo_service "code.gitea.io/gitea/services/repository" repo_service "code.gitea.io/gitea/services/repository"
@ -19,17 +17,21 @@ import (
ap "github.com/go-ap/activitypub" ap "github.com/go-ap/activitypub"
) )
func Fork(ctx context.Context, instance, username, reponame, destUsername string) error { func CreateFork(ctx context.Context, instance, username, reponame, destUsername string) error {
// TODO: Clean this up // TODO: Clean this up
// Migrate repository code // Migrate repository code
user, _ := user_model.GetUserByName(ctx, destUsername) user, err := user_model.GetUserByName(ctx, destUsername)
_, err := migrations.MigrateRepository(ctx, user, destUsername, migrations.MigrateOptions{ if err != nil {
return err
}
_, err = migrations.MigrateRepository(ctx, user, destUsername, migrations.MigrateOptions{
CloneAddr: "https://" + instance + "/" + username + "/" + reponame + ".git", CloneAddr: "https://" + instance + "/" + username + "/" + reponame + ".git",
RepoName: reponame, RepoName: reponame,
}, nil) }, nil)
if err != nil { if err != nil {
log.Warn("Couldn't create fork", err) return err
} }
// TODO: Make the migrated repo a fork // TODO: Make the migrated repo a fork
@ -45,26 +47,33 @@ func Fork(ctx context.Context, instance, username, reponame, destUsername string
return Send(user, &create) return Send(user, &create)
} }
func ForkFromCreate(ctx context.Context, repository forgefed.Repository) error { func ReceiveFork(ctx context.Context, create ap.Create) error {
// TODO: Clean this up // TODO: Clean this up
repository := create.Object.(*forgefed.Repository)
actor, err := personIRIToUser(ctx, create.Actor.GetLink())
if err != nil {
return err
}
// Don't create an actual copy of the remote repo! // Don't create an actual copy of the remote repo!
// https://gitea.com/Ta180m/gitea/issues/7 // https://gitea.com/Ta180m/gitea/issues/7
// Create the fork // Create the fork
repoIRI := repository.GetLink() repoIRI := repository.GetLink()
repoIRISplit := strings.Split(repoIRI.String(), "/") username, reponame, err := repositoryIRIToName(repoIRI)
instance := repoIRISplit[2] if err != nil {
username := repoIRISplit[7] return err
reponame := repoIRISplit[8] }
// FederatedUserNew(username + "@" + instance, ) // FederatedUserNew(username + "@" + instance, )
user, _ := user_model.GetUserByName(ctx, username+"@"+instance) user, _ := user_model.GetUserByName(ctx, username)
// var repo forgefed.Repository // var repo forgefed.Repository
// repo = activity.Object // repo = activity.Object
repo, _ := repo_model.GetRepositoryByOwnerAndName("Ta180m", reponame) // hardcoded for now :( repo, _ := repo_model.GetRepositoryByOwnerAndName(actor.Name, reponame) // hardcoded for now :(
_, err := repo_service.ForkRepository(ctx, user, user, repo_service.ForkRepoOptions{BaseRepo: repo, Name: reponame, Description: "this is a remote fork"}) _, err = repo_service.ForkRepository(ctx, user, user, repo_service.ForkRepoOptions{BaseRepo: repo, Name: reponame, Description: "this is a remote fork"})
return err return err
} }

View File

@ -0,0 +1,16 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package activitypub
import (
"context"
ap "github.com/go-ap/activitypub"
)
// Star a repo
func Star(ctx context.Context, like ap.Like) error {
return nil
}

View File

@ -114,18 +114,18 @@ func RepoInbox(ctx *context.APIContext) {
return return
} }
if activity.Object == nil {
ctx.ServerError("Activity does not contain object", err)
return
}
// Process activity // Process activity
switch activity.Type { switch activity.Type {
case ap.CreateType: case ap.CreateType:
if activity.Object == nil {
ctx.ServerError("Activity does not contain object", err)
return
}
switch activity.Object.(ap.Object).Type { switch activity.Object.(ap.Object).Type {
case forgefed.RepositoryType: case forgefed.RepositoryType:
// Fork created by remote instance // Fork created by remote instance
activitypub.ForkFromCreate(ctx, activity.Object.(forgefed.Repository)) activitypub.ReceiveFork(ctx, activity)
case forgefed.TicketType: case forgefed.TicketType:
// New issue or pull request // New issue or pull request
ticket := activity.Object.(forgefed.Ticket) ticket := activity.Object.(forgefed.Ticket)
@ -140,6 +140,8 @@ func RepoInbox(ctx *context.APIContext) {
// New comment // New comment
activitypub.Comment(ctx, activity.Object.(ap.Note)) activitypub.Comment(ctx, activity.Object.(ap.Note))
} }
case ap.LikeType:
activitypub.Star(ctx, activity)
default: default:
log.Info("Incoming unsupported ActivityStreams type: %s", activity.Type) log.Info("Incoming unsupported ActivityStreams type: %s", activity.Type)
ctx.PlainText(http.StatusNotImplemented, "ActivityStreams type not supported") ctx.PlainText(http.StatusNotImplemented, "ActivityStreams type not supported")