[p4] Finding changed files in workspace which p4 doesn't know about?

Jay Glanville Jay.Glanville at naturalconvergence.com
Fri Mar 16 09:22:45 PST 2007


Glad I can occasionally contribute.

---
Jay Dickon Glanville
Application Designer, Natural Convergence
jay.glanville at naturalconvergence.com
(613) 280-2000 x593


> -----Original Message-----
> From: Roy Smith [mailto:smith_roy at emc.com] 
> Sent: March 16, 2007 1:20 PM
> To: Jay Glanville
> Cc: perforce-user at perforce.com
> Subject: Re: [p4] Finding changed files in workspace which p4 
> doesn't know about?
> 
> 
> Thanks!
> 
> -------------------
> Roy Smith <smith_roy at emc.com>
> Software Guy, EMC Common Management Group
> 44 South Broadway, 7th floor
> White Plains, NY 10601
> (914) 580-3427
> 
> 
> On Mar 16, 2007, at 12:59 PM, Jay Glanville wrote:
> 
> >> From: perforce-user-bounces at perforce.com
> >> [mailto:perforce-user-bounces at perforce.com] On Behalf Of Roy Smith
> >>
> >> We've found a few scenarios where files can change in a workspace
> >> without p4 knowing about it.  For example:
> >>
> >> 1) Somebody creates a new file and forgets to do "p4 add"
> >>
> >> 2) Cygwin's brain-dead handling of file permissions lets 
> you edit an
> >> existing file without doing a "p4 open".
> >>
> >> 3) Somebody deliberately (and stupidly) chmods a file so they can
> >> edit it.
> >>
> >> Is there any easy way to find all these?  Basicly, I want to answer
> >> the question, "If I did an rm -rf; sync -f", would I get back
> >> exactly
> >> what I've got now?"
> >
> >
> > "p4 diff -se" will find the files that are 'dirty' (have 
> been modified
> > without the "p4 edit" command).  "p4 diff -sd" will find the files  
> > that
> > have been removed without the "p4 delete" command.  There 
> is no "find
> > all files that need to be 'p4 add'ed".
> >
> >
> > For my users, I wrote this script which lists all files that need  
> > to be
> > added, deleted or edited in order to get back to where they 
> should be.
> > I've attached it below.
> >
> >
> > P4win has a 'check consistency' command that only performs 
> a 'edit or
> > deleted' check.  It doesn't check for adds.
> >
> > P4V has a 'reconsile offline work' which performs all three checks  
> > (add,
> > edit and delete).
> >
> >
> > Hope this helps.
> >
> > JDG
> >
> >
> >
> >
> >
> >
> > ------- p4delta -------
> > #!/usr/bin/bash
> > #
> > # DESCRIPTION
> > # -----------
> > # Checks for the deltas (differences) between a file tree and the
> > # equivalent Perforce file tree.  Identifies files that might need  
> > to be
> > # added, files that have been deleted, and files that have been  
> > modified
> > # (dirty), all without perforce's knowledge.  This script's
> > functionality
> > # is very similar to the P4Win Check Consistency functionality,  
> > with the
> > # exception that Check Consistency doesn't check for files that  
> > need to
> > be
> > # added.
> > #
> > # For additional information, see the wiki article p4:tools:p4delta.
> > #
> > # USAGE
> > # -----
> > # This command needs to be executed from the root directory of the  
> > tree
> > for
> > # which to check consistency.  Therefore, tree options:
> > # 1) add the scripts location to your PATH environment, cd to root
> > #    directory and execute.
> > # 2) cd to root directory, and then execute 'path/to/script/p4delta'
> > # 3) copy script to root directory, cd to same directory 
> and execute.
> > #
> > # There are no command line parameters.
> > #
> > # IMPLEMENTATION DETAILS
> > # ----------------------
> > # For the finding of deleted and dirty files, this script 
> uses native
> > # perforce functionality (p4 diff -se and -sd).
> > #
> > # For the finding of files that need to be added to perforce, this
> > script
> > # uses the following methodology to determin the uncontrolled files:
> > # 1) retrieve from perforce a list of all the files that p4 
> thinks are
> > on
> > #    the local system
> > # 2) retrieve from the local file system a list of all 
> files under the
> > #    current directory and dump into a temp file
> > # 3) perform a diff between the two temp files
> > # 4) cleanup
> > #
> > # METADATA
> > # --------
> > # $Header: //depot/perforce_admin/general_scripts/p4delta#2 $
> > # $Date: 2007/01/23 $
> > # $Author: jglanville $
> >
> > p4_have="/tmp/__p4_have_output__"
> > file_have="/tmp/__local_file_output__"
> > # the current working directory using forward slashes for dir  
> > separators
> > current_dir=`pwd`
> > # the current working directory using OS-specific directory 
> separators
> > current_dir_os=${current_dir}
> > # deal with OS specific situations
> > case "`uname`" in
> >     CYGWIN*)
> >         current_dir=`cygpath -m -a ${current_dir}`
> >         current_dir_os=`cygpath -w -a ${current_dir}`
> >         ;;
> > esac
> >
> > # get a list of files that perforce thinks are on the local  
> > system.  The
> > # 'p4 have' command has a format of [//depot/path#rev - 
> /local/path].
> > # Therefore, use the sed to strip out the depot path and revision
> > number,
> > # plus to convert all windows back-slashes to forward slashes
> > p4 have ${current_dir_os}/... | sed -e "s/^.*#[0-9]* - //" -e
> > "s#\\\\#/#g" | sort -f > ${p4_have}
> >
> > # get a list of all the files under the current file 
> system.  The sed
> > # prefixes all the relative paths that find outputs with the current
> > # working directory
> > find . -type f | sed -e "s#^.#${current_dir}#" | sort -f > $ 
> > {file_have}
> >
> > # perform a diff of the output of the previous two commands.  Only
> > # interested in the entries that start with ">", which 
> indicate files
> > found
> > # on the local system that perforce doesn't know about
> > echo "[not under source control]"
> > diff -i ${p4_have} ${file_have} | grep "^>"
> > #comm -2 ${p4_have} ${file_have}
> >
> > # cleanup
> > rm  "${p4_have}" "${file_have}"
> >
> > # find all files that have been modified without p4's 
> knowledge (dirty
> > # files)
> > echo "[modified]"
> > p4 diff -se "${current_dir_os}"/...
> >
> > # find all files that have been deleted without p4's knowledge
> > echo "[deleted]"
> > p4 diff -sd "${current_dir_os}"/...
> >
> 
> 



More information about the perforce-user mailing list