func (s *MigrationService) UnlockRepo(org string, id int, repo string) (*Response, error) {
	u := fmt.Sprintf("orgs/%v/migrations/%v/repos/%v/lock", org, id, repo)
	req, err := s.client.NewRequest("DELETE", u, nil)
	if err != nil {
		return nil, err
	}
	req.Header.Set("Accept", mediaTypeMigrationsPreview)
	return s.client.Do(req, nil)
}
UnlockRepo unlocks a repository that was locked for migration.
id is the migration ID.
You should unlock each migrated repository and delete them when the migration
is complete and you no longer need the source data.

GitHub API docs: https://developer.github.com/v3/migration/migrations/#unlock-a-repository
package github
import (
	"errors"
	"fmt"
	"net/http"
	"strings"
)
type MigrationService service
type Migration struct {
	ID   *int    `json:"id,omitempty"`
	GUID *string `json:"guid,omitempty"`
	State *string `json:"state,omitempty"`
	LockRepositories *bool `json:"lock_repositories,omitempty"`
	ExcludeAttachments *bool         `json:"exclude_attachments,omitempty"`
	URL                *string       `json:"url,omitempty"`
	CreatedAt          *string       `json:"created_at,omitempty"`
	UpdatedAt          *string       `json:"updated_at,omitempty"`
	Repositories       []*Repository `json:"repositories,omitempty"`
}
func (m Migration) String() string {
	return Stringify(m)
}
type MigrationOptions struct {
	LockRepositories bool
	ExcludeAttachments bool
}
type startMigration struct {
	Repositories []string `json:"repositories,omitempty"`
	LockRepositories *bool `json:"lock_repositories,omitempty"`
	ExcludeAttachments *bool `json:"exclude_attachments,omitempty"`
}
func (s *MigrationService) StartMigration(org string, repos []string, opt *MigrationOptions) (*Migration, *Response, error) {
	u := fmt.Sprintf("orgs/%v/migrations", org)
	body := &startMigration{Repositories: repos}
	if opt != nil {
		body.LockRepositories = Bool(opt.LockRepositories)
		body.ExcludeAttachments = Bool(opt.ExcludeAttachments)
	}
	req, err := s.client.NewRequest("POST", u, body)
	if err != nil {
		return nil, nil, err
	}
	req.Header.Set("Accept", mediaTypeMigrationsPreview)
	m := &Migration{}
	resp, err := s.client.Do(req, m)
	if err != nil {
		return nil, resp, err
	}
	return m, resp, nil
}
func (s *MigrationService) ListMigrations(org string) ([]*Migration, *Response, error) {
	u := fmt.Sprintf("orgs/%v/migrations", org)
	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return nil, nil, err
	}
	req.Header.Set("Accept", mediaTypeMigrationsPreview)
	var m []*Migration
	resp, err := s.client.Do(req, &m)
	if err != nil {
		return nil, resp, err
	}
	return m, resp, nil
}
func (s *MigrationService) MigrationStatus(org string, id int) (*Migration, *Response, error) {
	u := fmt.Sprintf("orgs/%v/migrations/%v", org, id)
	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return nil, nil, err
	}
	req.Header.Set("Accept", mediaTypeMigrationsPreview)
	m := &Migration{}
	resp, err := s.client.Do(req, m)
	if err != nil {
		return nil, resp, err
	}
	return m, resp, nil
}
func (s *MigrationService) MigrationArchiveURL(org string, id int) (url string, err error) {
	u := fmt.Sprintf("orgs/%v/migrations/%v/archive", org, id)
	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return "", err
	}
	req.Header.Set("Accept", mediaTypeMigrationsPreview)
	s.client.clientMu.Lock()
	defer s.client.clientMu.Unlock()
	var loc string
	saveRedirect := s.client.client.CheckRedirect
	s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
		loc = req.URL.String()
		return errors.New("disable redirect")
	}
	defer func() { s.client.client.CheckRedirect = saveRedirect }()
	_, err = s.client.Do(req, nil)  
	if err == nil {
		return "", errors.New("expected redirect, none provided")
	}
	if !strings.Contains(err.Error(), "disable redirect") {
		return "", err
	}
	return loc, nil
}
func (s *MigrationService) DeleteMigration(org string, id int) (*Response, error) {
	u := fmt.Sprintf("orgs/%v/migrations/%v/archive", org, id)
	req, err := s.client.NewRequest("DELETE", u, nil)
	if err != nil {
		return nil, err
	}
	req.Header.Set("Accept", mediaTypeMigrationsPreview)
	return s.client.Do(req, nil)
}