[darcs-users] A dumb question

Eric Y. Kow eric.kow at gmail.com
Sat Nov 11 16:43:11 UTC 2006


On Sat, Nov 11, 2006 at 11:35:34 -0500, Ralph Dratman wrote:
> That is fascinating! Thank you! But why should we have to use a trick?

Because nobody has gotten around to implementing darcs query cat yet:
http://bugs.darcs.net/issue141

In case anybody wants to take the initiative, attached is my very
incomplete attempt from a long time ago, bits copied and pasted from
diff (or was it annotate), so incomplete, it probably doesn't even
compile or make any sense.

-- 
Eric Kow                     http://www.loria.fr/~kow
PGP Key ID: 08AC04F9         Merci de corriger mon français.
-------------- next part --------------
%  Copyright (C) 2006 Eric Kow
%
%  This program is free software; you can redistribute it and/or modify
%  it under the terms of the GNU General Public License as published by
%  the Free Software Foundation; either version 2, or (at your option)
%  any later version.
%
%  This program is distributed in the hope that it will be useful,
%  but WITHOUT ANY WARRANTY; without even the implied warranty of
%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%  GNU General Public License for more details.
%
%  You should have received a copy of the GNU General Public License
%  along with this program; if not, write to the Free Software Foundation,
%  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\subsection{darcs query cat}
\label{query-cat}
\begin{code}
module QueryCat ( query_cat ) where

import Control.Monad ( liftM )

import ColourPrinter ( fancyPrinters )
import DarcsArguments ( DarcsFlag(..), match_one, working_repo_dir, fix_filepath,
                        files, directories, pending, nullFlag )
import DarcsCommands ( DarcsCommand(..), nodefaults )
import DarcsUtils ( withCurrentDirectory )
import External ( clonePaths )
import FileName ( fp2fn )
import FilePathUtils ( (///) )
import Lock ( withTempDir )
import Match ( get_first_match, get_second_match,
               first_match, second_match,
               match_first_patchset, match_second_patchset,
             )
import PatchCore ( fn2d )
import Repository ( amInRepository, slurp_pending, slurp_recorded,
                    slurp_recorded_and_unrecorded,
                    withRepoLock )
import SlurpDirectory ( list_slurpy, list_slurpy_files, list_slurpy_dirs, get_path_list )
import Workaround ( getCurrentDirectory )
\end{code}

\options{query cat}

\haskell{query_cat_help}

\begin{code}
query_cat_description :: String
query_cat_description = "Output contents of version-controlled files."
\end{code}

\begin{code}
query_cat_help :: String
query_cat_help =
 "The cat command outputs the contents of a version-controlled file or files."
 ++ "  This is useful for retrieving prior versions of a given file\n"
\end{code}

\begin{code}
query_cat :: DarcsCommand
query_cat = DarcsCommand {
  command_name = "cat",
  command_help = query_cat_help,
  command_description = query_cat_description,
  command_extra_args = 0,
  command_extra_arg_help = [],
  command_command = cat_cmd,
  command_prereq = amInRepository,
  command_get_arg_possibilities = return [],
  command_argdefaults = nodefaults,
  command_darcsoptions = [match_one,
                          files,
                          working_repo_dir] }

cat_cmd :: [DarcsFlag] -> [String] -> IO ()
cat_cmd opts args =
 do formerdir <- getCurrentDirectory
    thename <- return $ just_dir formerdir
    withTempDir ("cat-"++thename) $ \dir -> do
      if second_match opts
         then -- apply selected patches in the temp directory
              withCurrentDirectory dir $ get_second_match formerdir opts
         else -- no match flag... means we just want the pristine version
              do (_, s) <- slurp_recorded_and_unrecorded formerdir
                 let ps = concatMap (get_path_list s) path_list
                 clonePaths formerdir dir ps
      --
      case path_list of
        [] -> return ()
        fs -> -- Dump the contents of each file to the screen
              -- Would it be better use FastPackedString here?
              mapM (\f -> (putStr . readFile $ (just_dir dir /// f))) fs
 where just_dir d = reverse $ takeWhile (/='/') $ reverse d
       path_list = if null args then [""] else map (fix_filepath "" opts) args
\end{code}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 186 bytes
Desc: not available
Url : http://lists.osuosl.org/pipermail/darcs-users/attachments/20061111/966dad38/attachment.pgp 


More information about the darcs-users mailing list