Start cleaning up fork.go
This commit is contained in:
parent
38a687c60e
commit
f0cded88bf
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -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")
|
||||||
|
|
Reference in New Issue