Repaso: Control de Versiones

  1. Defina que se entiende por Gestión de Configuraciones. Comente esta cita del ICM:
    Configuration management was introduced in the 1960s to resolve the inability of defense contractors to build a 2nd unit identical to the 1st. Designs for the 2nd unit did not accurately represent the 1st unit.

  2. ¿Que es un Issue tracking system?

  3. ¿Que hace el comando $ svn diff -c 9238?

  4. ¿Que hace el comando svn blame?
  5. ¿Que hace el comando svn annotate?
  6. Defina que es una property en subversion
  7. ¿Que hace scvn propget? ¿Cómo se usa?
  8. ¿Que hace scvn propset? ¿Cómo se usa?
  9. ¿Que hace la opción -F?
    $ svn propset license -F /path/to/LICENSE calc/button.c
    
  10. ¿Cómo se busca por una propiedad en un proyecto? (Véase la sección Searchability (or, Why Not Properties) en el capítulo 3 del libro de Subversion)
  11. El siguiente texto esta extraído del libro de subversion:
    For this reason, you might choose—especially in the revision property
    use case—to simply add your metadata to the revision's log message using
    some policy-driven (and perhaps programmatically enforced) formatting
    that is designed to be quickly parsed from the output of svn log. It is
    quite common to see the following in Subversion log messages:
    
    Issue(s): IZ2376, IZ1919
    Reviewed by:  sally
    
    This fixes a nasty segfault in the wort frabbing process
    …
    
    But here again lies some misfortune. Subversion doesn't yet provide
    a log message templating mechanism, which would go a long way toward
    helping users be consistent with the formatting of their log-embedded
    revision metadata.
    
    ¿Qué se le ocurre para hacer que el editor se abra con una plantilla dada?
  12. ¿Cuando se debe usar svn propedit?
  13. ¿Cómo controlo que editor se abre cuando uso svn propedit?
  14. ¿A que fichero pertenecen estas líneas?
    [helpers]
    ### Set editor to the command used to invoke your text editor.
    ###   This will override the environment variables that Subversion
    ###   examines by default to find this information ($EDITOR,
    ###   et al).
    # editor-cmd = editor (vi, emacs, notepad, etc.)
    
    ¿Para que sirven?
  15. ¿Que diferencia hay entre
    $ svn proplist calc/button.c
    
    y
        $ svn proplist -v calc/button.c
    
    ?
  16. ¿Cómo se elimina una propiedad de un item?

  17. ¿En que forma muestran los comandos svn status y svn diff los cambios en las propiedades?

  18. ¿Cómo se resuelve un conflicto entre propiedades? ¿Que contiene un fichero con sufijo .prej?

  19. ¿Que valores puede tomar la propiedad svn:eol-style?
  20. ¿Como se usa svn:ignore?
  21. ¿Cómo se usa la propiedad svn:executable? ¿Que argumentos lleva?

  22. ¿Cómo se usa la propiedad svn:mime-type?

  23. ¿Que formato popular de ficheros de configuración usa ~/.subversion/config?

  24. Explique las siguientes líneas.
    enable-auto-props = yes
    
    [auto-props]
    *.c = svn:eol-style=native
    *.cpp = svn:eol-style=native
    *.h = svn:eol-style=native
    # *.dsp = svn:eol-style=CRLF
    # *.dsw = svn:eol-style=CRLF
    *.sh = svn:eol-style=native;svn:executable
    *.pl = svn:eol-style=native;svn:executable
    # *.txt = svn:eol-style=native
    *.png = svn:mime-type=image/png
    *.jpg = svn:mime-type=image/jpeg
    Makefile = svn:eol-style=native
    
  25. ¿Como se usa svn:externals? ¿Para que sirve? ¿Que limitaciones tiene?
  26. Explique los comandos
    $ cat >svn_ext_val.txt
    dir_of_repo_one http://svn.my.com/path/to/repo_one
    dir_of_repo_two http://svn.my.com/path/to/repo_two
    $ svn propset svn:externals . -F svn_ext_val.txt
    
  27. ¿Que hace el comando shopt? ¿Que hace este comando?
    $shopt -s extglob progcomp
    
  28. ¿Que hace el comando complete? ¿Que hace esta línea?
    complete -W 'add blame praise annotate cat checkout co cleanup commit ci copy delete del \
                 remove rm diff di export help h import info list ls log merge mkdir move mv \
                 rename ren propdel pdel pd propedit pedit pe propget pget pg proplist plist pl \
                 propset pset ps resolved revert status stat st switch sw update up' svn
    
  29. ¿Que hace el programa bash_completion que viene con la distribución de subversion?
  30. ¿Que hace el comando svnadmin hotcopy RUTA_REPOS NUEVA_RUTA_REPOS?
  31. ¿Que hace el comando $ svnlook youngest repository/?

  32. ¿Que hacen los comandos svnadmin dump y svnadmin load?

  33. ¿Que hace el comando
    -bash-3.2$ svnadmin dump repository/ > dumprep.6
    ?
    

  34. ¿Que hace el comando
    pp2@nereida:~$ ssh banot cat dumprep.6 | svnadmin load mietsiirep
    
    ? ¿Como fue creado mietsiirep?

  35. ¿Qué hacen los comandos
    -bash-3.2$ svnadmin dump --incremental --revision 1:4 repository > dumprep.1to4
    -bash-3.2$ svnadmin dump --incremental --revision 5:6 repository > dumprep.5to6
    
    $ ssh banot cat dumprep.1to4 | svnadmin load mietsiiincrep
    $ ssh banot cat dumprep.5to6 | svnadmin load mietsiiincrep
    
    ?
  36. ¿Que hace este comando?
    $ svn merge http://svn.example.com/repos/calc/trunk
    
  37. ¿Cual es la diferencia entre usar patch y usar svn merge?
  38. Supongamos que ha pasado una semana desde el comando anterior. ¿Que hace ahora el mismo comando?

    $ svn merge http://svn.example.com/repos/calc/trunk
    

  39. ¿Que hace este comando?

    $ pwd
    /home/user/calc-trunk
    $ svn merge --reintegrate http://svn.example.com/repos/calc/branches/my-calc-branch
    
    ¿Que diff se hace?
  40. ¿Por que es conveniente suprimir una rama que ha sido reunificada con el tronco?
    $ svn delete http://svn.example.com/repos/calc/branches/my-calc-branch \
          -m "Remove my-calc-branch."
          Committed revision 392.
    
  41. ¿Cómo afectan las mezclas a la propiedad svn:mergeinfo?

  42. ¿Cómo es la sintáxis de svn:mergeinfo?

  43. ¿Que hace este comando?
    $ svn mergeinfo http://svn.example.com/repos/calc/trunk
    

  44. ¿Que hace este comando?
    $ svn mergeinfo http://svn.example.com/repos/calc/trunk --show-revs eligible
    

  45. ¿Que hace el comando $ svn merge -c 303 http://svn.example.com/repos/calc/trunk?
  46. ¿Que hace el comando $ svn merge -c -303 http://svn.example.com/repos/calc/trunk?

  47. ¿Cómo se resucita un item suprimido? (con y sin historia)

  48. ¿Que se entiende por cherrypicking?
    $ svn diff -c 355 http://svn.example.com/repos/calc/trunk
    

  49. ¿Que hace el comando?
    $ svn merge -c 355 http://svn.example.com/repos/calc/trunk
    

  50. ¿Que significa esta salida?
    $ svn propget svn:mergeinfo .
    /trunk:341-349,355
    

  51. ¿Cómo se interpreta esta salida?
    $ svn mergeinfo http://svn.example.com/repos/calc/trunk --show-revs eligible
    r350
    r351
    r352
    r353
    r354
    r356
    r357
    r358
    r359
    r360
    

  52. ¿Que hace este comando?
    ~/src/subversion/TRY-MGM-cache-pages$ svn merge svn+ssh://banot/home/casiano/repository/ejemplo/tags/REL-1.0 \
                                                    svn+ssh://banot/home/casiano/repository/ejemplo/tags/REL-2.0 \
                                                    .
    
  53. ¿Que hace este comando?
    $ svn merge http://svn.example.com/repos/calc/trunk --dry-run
    
  54. ¿Que hace este comando?
    ~/src/subversion/TRY-MGM-cache-pages$ svn merge -r10:11 svn+ssh://banot/home/casiano/repository/ejemplo/trunk/
    

  55. Se ha producido un conflicto al solicitar svn merge. ¿Cómo deshago los cambios introducidos en mi copia de trabajo debidos a la mezcla y vuelvo a la situación anterior?

  56. Se ha producido un conflicto al solicitar svn merge. ¿Cual es el significado de los ficheros filename.working, filename.left y filename.right?

  57. ¿Que hace este comando?
    $ svn merge -c 3328 --record-only http://svn.example.com/repos/calc/trunk
    
  58. ¿Que hace este comando?
    $ svn log -v -r 390 -g
    
  59. ¿Que hace este comando?
    $ svn blame button.c -g
    
  60. Explique la frase:
    A lesser-known fact about Subversion is that it lacks true renames

  61. ¿Que ocurre cuando se hace una mezcla de reunificación si en la rama se renombró un fichero pero en el tronco se continuó introduciendo mejoras en el mismo?
  62. ¿Que hacen estos comandos?
    $ cd calc
    $ svn info | grep URL
    URL: http://svn.example.com/repos/calc/trunk
    $ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch
    

  63. ¿Que es un changeset?
  64. ¿Que significa que una copia de trabajo esta 'limpia' (clean)?
  65. ¿Que hace el comando merge
    $ pwd
    /home/user/my-calc-branch
    
    $ svn merge http://svn.example.com/repos/calc/trunk
    
    Si es la primera vez que se ejecuta en la copia de trabajo de la rama?
  66. ¿En que propiedad guarda subversion la información de la mezcla?
  67. ¿Que hace el comando merge
    $ svn merge http://svn.example.com/repos/calc/trunk
    
    la siguiente vez que se aplica? ¿Que changesets se aplican?
  68. ¿Que hace este comando?:
    $ pwd
    /home/user/calc-trunk
    $ svn merge --reintegrate http://svn.example.com/repos/calc/branches/my-calc-branch
    
    ¿Que cambios se aplican?
  69. ¿Porqué es necesario suprimir una rama reunificada?
    $ svn delete http://svn.example.com/repos/calc/branches/my-calc-branch -m "Remove my-calc-branch."
    
  70. ¿Cual es la forma en la que la información de mezcla se guarda en svn:mergeinfo?
  71. ¿Cual es la salida?
    $ svn mergeinfo http://svn.example.com/repos/calc/trunk
    
  72. ¿Cual es la salida?
    $ svn mergeinfo http://svn.example.com/repos/calc/trunk --show-revs eligible
    
  73. ¿Qué hace este comando?
    $ svn merge http://svn.example.com/repos/calc/trunk --dry-run
    
  74. ¿Que debemos hacer si la mezcla produce conflictos que parecen muy difíciles de resolver?
  75. Supongamos que los cambios que hicimos en el último commit (revisión 303) eran erróneos. ¿Cómo podemos usar svn merge para deshacer el cambio?
  76. ¿Con que comando localizo un fichero/directorio que fué suprimido hace un tiempo?
  77. ¿Como reincorporo (con historia) un fichero/directorio que fué suprimido hace tiempo al proyecto?
  78. ¿Como reincorporo (sin historia) un fichero/directorio que fué suprimido hace tiempo al proyecto?
  79. ¿A que se denomina cherrypicking?
  80. Supongamos que a la rama se le han aplicado los cambios habidos en el tronco en el rango de revisiones 341-349 y que el tronco va por la revisión 360. ¿Que hace el comando?
    $ svn merge -c 355 http://svn.example.com/repos/calc/trunk
    
    ¿Cual será la salida de propget después de este merge?
    $ svn commit -m '...'
    $ svn propget svn:mergeinfo .
    
    ¿Que salida producen los siguientes comandos? (Suponga que el tronco va por la revision 360).
    $ svn mergeinfo http://svn.example.com/repos/calc/trunk --show-revs eligible
    $ svn merge http://svn.example.com/repos/calc/trunk
    
  81. ¿En que forma se producen las mezclas cuando esta se descompone en subrangos? ¿Que ocurre con las subsiguientes mezclas si en una se produce un conflicto?

  82. ¿Que es un hook? ¿En que directorio se ponen?
  83. ¿Que argumentos se pasan a pre-commit? ¿Cómo se interpretan los códigos de salida de pre-commit? ¿Cuando se aborta el commit?

  84. Explique el siguiente programa de post-commit:

    #!/bin/sh
    REPOS="$1"
    REV="$2"
    
    /usr/share/doc/subversion-1.4.2/tools/hook-scripts/commit-email.pl "$REPOS" "$REV" \
                         --from 'aluXXX@ull.es' -r  'aluXXX@ull.es' 'aluXXX@gmail.com'
    
    ¿Cómo se usa?

    1. Explique este programa de pre-commit:
      #!/bin/sh
      
      REPOS="$1"
      TXN="$2"
      
      perl -I/home/casiano/perl5/lib/perl5/site_perl/5.8.8/ \
           /home/casiano/newrepository/hooks/commit-access-control.pl \
           "$REPOS" "$TXN" /home/casiano/newrepository/hooks/commit-access-control.cfg || exit 1
      
      # All checks passed, so allow the commit.
      exit 0
      
    2. ¿Que hace la librería Config::IniFiles?
    3. Explique el sgnificado de cada una de las líneas del fichero de configuración:

      -bash-3.2$ cat commit-access-control.cfg
      [Make everything read-only for all users]
              match   = .*
              access  = read-only
      
      [project1 aluXXXX permissions]
              match  = ^project1/trunk
              users  = myfriend
              access = read-write
      
      [casiano permissions]
              match  = .*
              users  = casiano
              access = read-write
      
    4. Expique este fragmento:
      aluXXXX@nereida:/tmp$ sed -ne '/svn/,//p' /home/aluXXXX/.ssh/config 
      Host svn                                                    
      HostName banot.etsii.ull.es                                 
      user casiano                                                
      IdentityFile /home/aluXXXX/.ssh/id_dsa_svn
      
      ¿En que fichero va este fragmento?
    5. En el programa de pre-commit, ¿Cómo podemos saber quien es el autor de la transacción?
    6. ¿Cómo podemos saber las rutas que cambiaron?
    7. ¿Cómo podemos saber los directorios que cambiaron?

  85. Cuando se escribe un programa que controla un programa externo y parsea su salida ¿Que variable de entorno hay que establecer y a que valor debe estar para asegurarnos que los mensajes serán emitidos en inglés?
  86. ¿Que hace el módulo App::SVN::Bisect?
  87. ¿Que hace este comando?
      $ svn-bisect --min 25000 --max 26000 start
    
  88. ¿Que hace este comando?
        $ svn-bisect bad
    
  89. ¿Que hace este comando?
        $ svn-bisect good
    
  90. ¿Que hace este comando?
        $ svn-bisect reset
    
  91. ¿Que hace este comando?
        $ svn-bisect --back reset
    
  92. ¿Que hace este comando?
    svn-bisect run ./mytest.sh
    

  93. ¿Cuales son los pasos para aplicar el Método Científico a la labor de depuración?

Casiano Rodríguez León
2012-02-29