Author: chatellier Date: 2009-10-27 11:01:04 +0000 (Tue, 27 Oct 2009) New Revision: 2698 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/VersionStorage.java Log: VCS improvement. Rename isVersionableAble methode. Fix isVersionable method. Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/VersionStorage.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/VersionStorage.java 2009-10-27 10:54:43 UTC (rev 2697) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/VersionStorage.java 2009-10-27 11:01:04 UTC (rev 2698) @@ -50,10 +50,10 @@ /** Logger for this class */ private static final Log log = LogFactory.getLog(VersionStorage.class); - + /** Listener set. Manage single reference and weak reference. */ protected static ListenerSet<StorageChangeListener> changeListeners = new ListenerSet<StorageChangeListener>(); - + protected File root = null; protected File file = null; @@ -62,7 +62,7 @@ * Par exemple si on a /home/poussin/isis-database comme root * il faut que file soit un fichier ou un sous fichiers dans root * - * @param root le repertoire racine de mise en VCSNone (HOME VCSNone) + * @param root le repertoire racine de mise en VCS (HOME VCS) * @param file le fichier a gérer. */ protected VersionStorage(File root, File file) { @@ -70,32 +70,40 @@ this.file = file; } + /** + * Get {@link VCS}. + * + * @return VCS + */ protected static VCS getVCS() { return IsisFish.vcs; } /** - * Permet de demander la preparation des fichiers pour etre envoyé - * vers le VCS. + * Permet de demander la preparation des fichiers pour etre envoyé vers le VCS. */ protected abstract void prepare(); /** - * @return Returns the root. + * Get VCS root directory. + * + * @return the root. */ public File getRoot() { return this.root; } /** - * @return Returns the file. + * Get file. + * + * @return the file. */ public File getFile() { return this.file; } /** - * Indique s'il a deja ete ajouté au cvs. Si file est un repertoire + * Indique s'il a deja ete ajouté au VCS. Si file est un repertoire * (ex pour Region) alors vrai meme si tous les fichiers du repertoire * ne sont pas sur le VCSNone * @@ -114,20 +122,24 @@ * @param file le fichier a tester * @return {@code true} si le fichier est versionné */ - protected boolean isVersionnableAbleFile(File file) { - + protected boolean isVersionnableFile(File file) { + // Dans le cas ou on essaye de savoir si file // est versionnable dans le storage courant // mais le VCS est toujours celui d'ISIs en static, // si le storage est alleur que ce VCS // cela ne fonctionne pas. - + // FIXME il ne faurdrait pas que le VCS soit // statique , mais contextuel au this.file // du storage + + boolean result = true; - boolean result = true; - if (getVCS().getLocalRepository().equals(this.file)) { + // Ca fait une erreur de fichier non versionne + // si on essaye de l'appeler sur le working directory + // dans ce cas, on retourne la valeur par defaut "true" + if (!getVCS().getLocalRepository().equals(this.file)) { result = getVCS().isVersionnableFile(file); } return result; @@ -137,7 +149,7 @@ * Donne la liste de tous les fichiers que le VCS doit gérer. * Par defaut parcours tous les repertoires et ajouter tous les fichiers * et repertoire trouvé. Il est possible d'exclure des fichiers et/ou - * repertoire en surchargeant {@link #isVersionnableAbleFile(File)} + * repertoire en surchargeant {@link #isVersionnableFile(File)} * * @param current le fichier * @param result la liste des fichiers à traiter @@ -145,7 +157,7 @@ * update */ protected List<File> getFiles(File current, List<File> result) { - if (isVersionnableAbleFile(current)) { + if (isVersionnableFile(current)) { result.add(current); if (current.exists() && current.isDirectory()) { for (File child : current.listFiles()) { @@ -157,7 +169,7 @@ } /** - * Donne la liste de tous les fichiers à gérer par le VCSNone. + * Donne la liste de tous les fichiers à gérer par le VCS. * Ceci inclu la liste des répertoires pour aller de ce storage * jusqu'a la racine VCSNone si withParent est vrai * @@ -172,6 +184,7 @@ while (withParent && current != null && !current.equals(getRoot())) { current = current.getParentFile(); if (current != null) { + // insere les parents avant tous les autres result.add(0, current); } } @@ -189,7 +202,10 @@ */ public void add(String msg) throws VCSException { prepare(); + + // parent folder must be added too List<File> files = getFiles(true); + // we can sure remove module directory and root directory files.remove(IsisFish.config.getDatabaseDirectory()); @@ -208,14 +224,23 @@ */ public void delete(boolean vcsDelete) throws StorageException { if (vcsDelete) { - List<File> files = getFiles(true); + + // parent folder must not be deleted + List<File> files = getFiles(false); + + if (log.isDebugEnabled()) { + log.debug("About to delete : " + files); + } + try { getVCS().delete(files, _("isisfish.versionStorage.removed")); } catch (VCSException eee) { - throw new StorageException(_("isisfish.error.delete.vcs.files"), eee); + throw new StorageException( + _("isisfish.error.delete.vcs.files"), eee); } } //TODO There is a bug to fix ? some files are not deleted! + // due to h2, storage need to be closed before deletion if (getFile().isDirectory()) { FileUtil.deleteRecursively(getFile()); } else { @@ -224,15 +249,14 @@ } /** - * Permet d'envoyer des modifications faite en local sur le VCSNone + * Permet d'envoyer des modifications faite en local sur le VCS. * * @param msg le message indiquant le type des modifications * @throws VCSException si pb pendant l'op - * */ public void commit(String msg) throws VCSException { // on appelle en fait add, car il y a peut-etre des nouveaux fichiers - // a ajouter au VCSNone et ca doit etre fait automatiquement + // a ajouter au VCS et ca doit etre fait automatiquement add(msg); } @@ -260,7 +284,8 @@ * @param module le repertoire qui peut etre scripts ou exports * @throws VCSException si pb pendant l'opération */ - public static void checkout(File destDir, String module) throws VCSException { + public static void checkout(File destDir, String module) + throws VCSException { // Si on utilise pas le bon tag on change de tag Version tag = IsisConfig.getApiVersion(); if (!getVCS().isTag(tag)) { @@ -282,8 +307,8 @@ List<String> result = new ArrayList<String>(); if (directory.exists()) { - for(File f : directory.listFiles()) { - if(getVCS().isVersionnableFile(f)) { + for (File f : directory.listFiles()) { + if (getVCS().isVersionnableFile(f)) { result.add(f.getName()); } } @@ -333,7 +358,7 @@ } } } - + /** * Add listener to be notified on change to storage. * @@ -342,13 +367,14 @@ public static void addStorageChangeListener(StorageChangeListener listener) { changeListeners.add(listener); } - + /** * Remove listener for storage change notification. * * @param listener listener to remove */ - public static void removeStorageChangeListener(StorageChangeListener listener) { + public static void removeStorageChangeListener( + StorageChangeListener listener) { changeListeners.remove(listener); } }