tag - qué tipos de etiquetas existen en git
¿Cómo puedo filtrar todas las solicitudes de extracción de GitHub para una rama objetivo específica? (2)
Estoy trabajando en un repositorio de GitHub con muchas sucursales y solicitudes de extracción.
Digamos, por ejemplo, que tengo las siguientes solicitudes de extracción:
-
a
a ramaX
-
b
a ramaX
-
c
a ramaY
-
d
a ramaX
-
e
para ramificarY
.
¿Hay alguna forma de encontrar todas las solicitudes de extracción dirigidas a la rama X
(es decir, a -> X
, b -> X
, d -> X
)?
A partir del 2016-01-10, esto se ha agregado a la barra de api de búsqueda gh, vea la siguiente respuesta.
Se aceptó el original (y ahora se publicó la respuesta) sin editar.
Actualmente no está disponible a través de la interfaz web
GitHub actualmente no proporciona una forma de filtrar solicitudes de extracción por su sucursal de destino a través de su interfaz web. En su lugar, todo lo que obtiene actualmente es solo la lista completa de solicitudes de extracción con los nombres de las ramas del tema:
Al hacer clic en una solicitud de extracción se mostrará la rama de destino, pero eso no ayuda realmente a realizar ninguno de los filtros que desea hacer.
Puedes usar la API REST de GitHub en su lugar
Sin embargo, es posible filtrar solicitudes de extracción utilizando la API REST de GitHub :
GET /repos/:owner/:repo/pulls?base=:branch
Eso debería mostrarle todas las solicitudes de extracción abiertas para el repositorio :owner/:repo
, filtradas por las solicitudes que apuntan a :branch
como su rama base. De la documentación:
Filtros tirados por nombre de rama base. Ejemplo:
gh-pages
.
Ejemplo usando cURL
Si tiene el curl
disponible, puede probarlo en un repositorio público desde la línea de comandos:
curl https://api.github.com/repos/codecombat/codecombat/pulls?base=master > /
pulls.json
Eso devolverá una respuesta JSON de la siguiente forma:
[
{
"url": "https://api.github.com/repos/codecombat/codecombat/pulls/879",
"id": 14955421,
"html_url": "https://github.com/codecombat/codecombat/pull/879",
"head": {
"label": "DanielRodriguezRivero:patch-4",
"ref": "patch-4",
"sha": "baff84f0aeee12f23e3608558ae5341a0b5f939b",
"repo": {
"id": 16202384,
"name": "codecombat",
"full_name": "DanielRodriguezRivero/codecombat"
}
},
"base": {
"label": "codecombat:master",
"ref": "master",
"sha": "5e2f3ac7cb731a6e40e81737a5122c7fe1b746d3",
"repo": {
"id": 15193430,
"name": "codecombat",
"full_name": "codecombat/codecombat"
}
}
}
]
Cada objeto en la matriz es una solicitud de extracción, filtrada por la rama base / destino. El JSON en realidad contiene mucha más información que esta, solo he eliminado la mayor parte para mostrar las partes relevantes para esta pregunta.
Analizando la respuesta cURL
Probablemente podría escribir un script Python / Ruby / PHP / Whatever para luego analizar la propiedad html_url
de cada solicitud de extracción y listarla en la línea de comandos. Por ejemplo, aquí hay un simple script de Ruby que analizará la salida de una respuesta JSON guardada de la salida de curl
:
require ''json''
json = JSON.parse(File.read(''./pulls.json''))
pulls = json.map { |pull| { title: pull[''title''], url: pull[''html_url''] } }
pulls.each do |pull|
puts pull.values
puts
end
Lo que da como resultado lo siguiente:
$ ruby parser.rb
Update es-ES.coffee
https://github.com/codecombat/codecombat/pull/879
Fix deltas referring to last system saved
https://github.com/codecombat/codecombat/pull/874
Refactor getNameById and add naming to systems in deltas
https://github.com/codecombat/codecombat/pull/866
Traducido varios textos del fichero es-ES.coffe al espa├▒ol de Espa├▒a
https://github.com/codecombat/codecombat/pull/865
Anon name collide
https://github.com/codecombat/codecombat/pull/834
Si, puedes hacerlo.
En la terminología de Github, la "bifurcación" es "base". Por lo tanto, la frase de búsqueda es: is:open is:pr base:X
Descripción oficial: Búsqueda basada en nombres de sucursales.
Opcionalmente, puede agregar is:merged
o is:unmerged
filtros sin is:merged
también.