Теперь с API-интерфейсом graphql стало намного проще, вы можете получить все это в одном запросе.
сначала вы получаете свое репо:
query {
repository(name: "MyRepo" owner: "mylogin"){
}
}
затем вы получаете его defaultBranchRef, чтобы упростить жизнь
defaultBranchRef{
}
Теперь вся ссылка на ветку на самом деле является просто указателем на фиксацию, и, поскольку graphql строго типизирован (а ссылки могут быть разными вещами), нам нужно сообщить ему, что это фиксация,
target{
...on Commit {
}
}
Итак, цель — это то, на что указывает наша ссылка, и мы говорим: «Если это фиксация, сделайте это».
и что он должен делать? он должен получить самую последнюю фиксацию (поскольку в репозитории будут самые последние файлы)
поэтому для этого мы запрашиваем историю
history(first: 1 until: "2019-10-08T00:00:00"){
nodes{
}
}
теперь внутри nodes
мы находимся внутри нашего коммита, и теперь мы можем видеть файлы, файлы в указателе коммитов на самом деле просто указатель на дерево, а дерево просто имеет записи, которые могут быть объектами типа Tree или введите блоб
записи, представляющие файлы, известны как BLOB-объекты, но, поскольку мы ничего с ними не делаем, а только перечисляем их имена, вам даже не нужно знать, что
но важно знать, что деревья также являются входами, поэтому, если вы найдете дерево, вам нужно копнуть глубже, но вы можете углубиться только на заранее определенное количество уровней.
tree{
entries {
name
object {
...on Tree{
entries{
name
object {
...on Tree{
entries{
name
}
}
}
}
}
}
}
}
теперь, чтобы собрать все это вместе:
query{
repository(owner: "MyLogin", name: "MyRepo") {
defaultBranchRef {
target {
... on Commit {
history(first: 1 until: "2019-10-08T00:00:00") {
nodes {
tree {
entries {
name
object {
... on Tree {
entries {
name
object{
...on Tree{
entries{
name
object{
...on Tree{
entries{
name
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
person
Kyle Roux
schedule
08.10.2019