Esto sigue a my previous question sobre TFS 2010 y la posibilidad de crear un registro de cambios.TFS2010: Recuperar todos los conjuntos de cambios asociados con una rama (recursión completa)
Antes usaba etiquetas para identificar una versión del programa, pero como las etiquetas no son puntos fijos en el tiempo, ahora estoy usando branches.
Así es como la jerarquía de la rama se ve así:
Como se puede ver, hay dos aplicaciones diferentes que son ramas del tronco: APP_A
(aplicación A) y APP_B
(aplicación B). Ambos son casi idénticos, pero hay algunas diferencias funcionales.
Aquí es el proceso para crear una nueva versión de la aplicación (por ejemplo la versión 1.3):
- El
Main trunk
se modifica (se añaden nuevas funcionalidades, correcciones de errores ...) - Desde el modificado
Main trunk
, se crea una nueva rama:Main trunk 1.3
APP_A
rama podría ser modificado, por lo funcionalidades únicas deAPP_A
trabajarán con la modificación de v1.3APP_B
rama podría modificarse, por lo funcionalidades únicas deAPP_B
trabajarán con la modificación de v1.3Main trunk 1.3
se fusionaron paraAPP_A
yAPP_B
, por lo tantoAPP_A
yAPP_B
aplicaciones recibir las modificaciones de laMain trunk
- Desde el
APP_A
rama modificada , se crea una nueva rama:APP_A_1.3
- Desde el
APP_B
rama modificada, se crea una nueva rama:APP_B_1.3
Mi objetivo es poder generar un registro de cambios entre APP_A_1.3
y APP_A_1.2
.
Por changelog me refiero a una lista de WorkItems. Cada conjunto de cambios registrado se asocia con uno o más elementos de trabajo (por ejemplo, un elemento de error). Me gustaría poder obtener la lista de todos los elementos de trabajo que se vinculó a un conjunto de cambios que ha afectado APP_A_1.3
: esos conjuntos de cambios pueden provenir del Main trunk
(paso 1 anterior), APP_A branch
(paso 3 anterior) o incluso el APP_A_1.3
rama en sí (si las revisiones están registradas después de que se haya creado la rama).
Para obtener esta lista de elementos de trabajo, traté de conseguir la lista de todos los conjuntos de cambios que están "vinculados" a APP_A_1.2
("ligado" = el código que se comprueba en el conjunto de cambios está ahora en la rama APP_A_1.2
) y la lista de todos los conjuntos de cambios que están "vinculados" al APP_A_1.3
.
Entonces, podré saber qué conjuntos de cambios están "vinculados" al APP_A_1.3
y no "vinculados" al APP_A_1.2
.A partir de este subconjunto de conjuntos de cambios, obtendré todos los artículos de trabajo asociados y, por lo tanto, mi registro de cambios.
Aquí está mi problema: ¿cómo podría obtener la lista de TODOS conjuntos de cambios que están "vinculados" con una rama específica? Estoy usando la API TFS 2010 para el código C#.
La entrada de mi programa (que sería recuperar todos los conjuntos de cambios para una rama determinada) sería el nombre de la rama (por ejemplo APP_A_1.2
), y la salida sería la lista de los siguientes conjuntos de cambios:
- conjuntos de cambios aplicado sobre
APP_A_1.2
propia oficina - conjuntos de cambios aplicados en
APP_A
rama antesAPP_A_1.2
fue creado - conjuntos de cambios aplicados en
Main trunk 1.2
rama antes de que se ha fusionado aAPP_A
- conjuntos de cambios aplicados en
Main trunk
rama antesMain trunk 1.2
fue creado
He escrito los siguientes fragmentos de código para obtener todos esos conjuntos de cambios:
// Gets the list of all changesets ID from APP_A_1.2 branch
var branch1ChangeSets = myVersionControlServer.QueryHistory(
"$/PATH/APP_A_1.2/",
VersionSpec.Latest,
0,
RecursionType.Full,
null,
null,
null,
int.MaxValue,
false,
false).OfType<Changeset>().Select(z => z.ChangesetId).ToList();
Incluso si RecursionType.Full
se especifica, el código anterior solo devuelve conjuntos de cambios que se registraron en la rama APP_A_1.2
. Esto es idéntico al comando "Historial" en la vista del Explorador de código fuente en Visual Studio.
Luego probé el siguiente fragmento de código:
// Gets the list of all changesets ID from APP_A_1.2 branch
var branch1MergedChangeSets = myVersionControlServer.QueryMerges(
null,
null,
"$/PATH/APP_A_1.2/",
VersionSpec.Latest,
null,
null,
RecursionType.Full).Select(z => z.SourceVersion).ToList();
Esto devuelve conjuntos de cambios que han sido analizados en el APP_A_1.2
rama + aquellos que fueron cheked-in en APP_A
rama antes APP_A_1.2
fue creado. Mucho mejor, pero no suficiente. No puedo encontrar una manera de hacer que la recursión funcione con las ramas que están "arriba" APP_A
(Main trunk
en mi caso) ...
¿Alguien tiene una idea?
Además, cualquier mejor idea para obtener el registro de cambios entre dos ramas es bienvenido ... Thx.
¡Gran pregunta! El cajero automático está atascado con la forma de recuperar con precisión los conjuntos de cambios. Una vez que los obtenga, considere este fantástico artículo de B.Hodges, que lo ayudará a correlacionar una lista de conjuntos de cambios con una lista de elementos de trabajo: http://blogs.msdn.com/b/buckh/archive/2012 /02/01/listing-the-work-items-associated-with-changesets-for-a-path.aspx – pantelif