2012-04-03 8 views
7

En general, se considera una buena práctica agregar algunas líneas con autor, versión e información de licencia al principio de los archivos fuente. Por ejemplo, GNU GPL v3 sugiere añadirGestión automática de encabezado de licencia/autor/versión en archivos de origen

<one line to give the program's name and a brief idea of what it does.> 
Copyright (C) <year> <name of author> 

This program is free software: you can redistribute it and/or modify 
it under the terms [SNIP] 

me resulta tedioso para agregarlo manualmente a cada archivo, y tener que actualizar todos ellos de vez en cuando, cuando alguna de esta información cambia (nuevos autores, los derechos de autor años, baches de versión).

¿Hay alguna manera de administrar esto automáticamente, de modo que solo tenga que editar esto en un solo lugar y se copie automágicamente?

Si es necesario, puede suponer que estoy utilizando cualquier sistema de control de revisiones moderno.

+0

Por favor, aclarar, que VCS y bajo qué sistema operativo que desea utilizar. Además, ¿tiene (planea usar) cualquier herramienta de CI | Implementar? –

+0

Nota al margen: el año de protección de derechos de autor no es año per se, es rango (* dinámico *) en el principio y el final de la forma (según las sugerencias FSF y la lógica simple pura) –

+0

@LazyBadger: uso principalmente Linux + git, pero También tengo curiosidad sobre las soluciones para otros sistemas. Y digamos que no hay CI/Implementar, pero no veo cómo esto podría ser relevante, ya que solo funcionan en una etapa posterior (quiero que las líneas de derechos de autor estén allí en el VCS, * antes * de implementar). En cuanto al año de copyright, no importa si el formato es 2007-2011 o 2011 solamente, aún tengo que actualizarlo todos los años, ¿verdad? –

Respuesta

4

En general, se considera una buena práctica agregar algunas líneas con autor, versión e información de licencia a la parte superior de los archivos fuente.

Eso depende. En primer lugar hay dos (o más) formas de hacer esto:

  • gestionar la información de licencias por archivo
  • gestionar la información de licencia en una ubicación central.

Si inicia un proyecto desde cero, el método por archivo es a menudo fácil de hacer sin dejar las cosas claras. Mientras escribes, con el tiempo cada vez es más difícil hacer un seguimiento de las cosas. Entonces, cada vez más proyectos cambian a la variante de ubicación central.

El método de archivo por archivo tiene la ventaja de que el alcance de un trabajo es claro. A menudo escribes el nombre de la aplicación en el archivo-comentario. Si se saca un solo archivo por alguna razón, la información aún está allí y la cadena de documentación no está rota.

Con el método de ubicación central, la ventaja es que esto normalmente es compatible con su software de control de versiones, por ejemplo, GIT. Los compromisos pueden ser firmados por la persona que realiza la actividad y se puede otorgar el autor. Está documentado quién ha escrito el código automáticamente y esa información se almacena en una ubicación central: el VCS.

Guarde un archivo de COPIA con su paquete donde proporciona la información principal de forma centralizada. Puede generar fácilmente la lista de autores a través del VCS. Y por cada archivo se puede crear una cabecera, que simplemente especifica qué software y dónde buscar en, sólo un esbozo:

/** 
* Flux Deluxe v3.2.0 - Vector Drawing Redefined 
* 
* Copyright 2010, 2012 by it's authors. 
* Some rights reserved. See COPYING, AUTHORS. 
*/ 

Si se libera una nueva versión de un nuevo año Es una obviedad para actualizar todos los archivos.

+1

Bueno, mi pregunta es exactamente cómo manejas este "obvio" de actualizar todos los archivos, sin, por supuesto, hacerlo a mano. ¿Hay alguna herramienta para eso? ¿Escribes tu propia expresión regular para cada cambio de versión y espero que no coincida demasiado? ¿Edita cada archivo a mano? –

+0

Para reemplazar texto en (múltiples) archivos, puede usar ['sed'] (http://www.grymoire.com/Unix/Sed.html). Además, dependiendo de qué IDE utilice allí, también se busca y se reemplaza en los archivos con bastante frecuencia. Eso es lo que quise decir con "no-brainer": Multi-File-Search-And-Replace. Si los encabezados permanecen igual (al menos la parte principal), es solo una búsqueda directa y reemplazar. – hakre

+0

Ok, gracias. No estaba satisfecho con esta solución porque siempre existe el riesgo de que coincida demasiado (reemplace todo "Flux Deluxe v.3.2.0" con v.3.2.1? Su archivo CHANGELOG y sus mensajes de error de compatibilidad pueden tener algo en contra de eso. ..), entonces pregunté si había alguna herramienta especialmente escrita para eso. Aceptaré "no, todos publicamos nuestra propia expresión regular" como respuesta. :) –

0

Si trabaja con Visual Studio, puede usar macros y adjuntarle un atajo. Luego, al crear un nuevo archivo, use el atajo para agregar un encabezado. Si quiere asegurarse de que se haya incluido un encabezado en cada archivo, puede usar StyleCop.

siguientes enlaces pueden ser útiles:
http://abhijitjana.net/2010/12/05/add-document-header-for-files-automatically-in-visual-studio/
http://stylecop.codeplex.com/

En Eclipse, también hay soporte de macros lo que debería ser capaz de hacer lo mismo que se proponga para VS. Sin embargo, no tengo ninguna experiencia con eso.

Para Java, hay una alternativa a StyleCop:
http://stylecop.codeplex.com/

no he oído hablar de ningún SVN-herramientas que se adaptan los ficheros por si mismo. Usar macro en su editor es lo más parecido a lo que desea.

+0

Las macros funcionan para crear el encabezado la primera vez (además de copiar y pegar), pero no para actualizarlo, a menos que me falta algo. Y todavía requieren una cantidad de trabajo que se escala como O (n) con el número de archivos en lugar de O (1). –

Cuestiones relacionadas