diff options
| author | Eric S. Raymond | 2008-05-15 17:38:50 +0000 |
|---|---|---|
| committer | Eric S. Raymond | 2008-05-15 17:38:50 +0000 |
| commit | 370fded4f6cc9c10c776733a1944b1faab84e2bd (patch) | |
| tree | d17c372c68ede44cfe53e0f8ff073756ded603bd | |
| parent | e6d897b38e5b3286162a6f486dc221251dcbf9ba (diff) | |
| download | emacs-370fded4f6cc9c10c776733a1944b1faab84e2bd.tar.gz emacs-370fded4f6cc9c10c776733a1944b1faab84e2bd.zip | |
Snapshot primitives globally renamed to refer to tags, documentation updated.
| -rw-r--r-- | doc/emacs/ChangeLog | 7 | ||||
| -rw-r--r-- | doc/emacs/emacs.texi | 4 | ||||
| -rw-r--r-- | doc/emacs/files.texi | 14 | ||||
| -rw-r--r-- | doc/emacs/vc-xtra.texi | 4 | ||||
| -rw-r--r-- | doc/emacs/vc2-xtra.texi | 133 | ||||
| -rw-r--r-- | lisp/ChangeLog | 5 | ||||
| -rw-r--r-- | lisp/vc-cvs.el | 10 | ||||
| -rw-r--r-- | lisp/vc-git.el | 69 | ||||
| -rw-r--r-- | lisp/vc-hg.el | 7 | ||||
| -rw-r--r-- | lisp/vc-hooks.el | 16 | ||||
| -rw-r--r-- | lisp/vc-mcvs.el | 12 | ||||
| -rw-r--r-- | lisp/vc-rcs.el | 15 | ||||
| -rw-r--r-- | lisp/vc-sccs.el | 20 | ||||
| -rw-r--r-- | lisp/vc-svn.el | 12 | ||||
| -rw-r--r-- | lisp/vc.el | 78 |
15 files changed, 205 insertions, 201 deletions
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index e66e7f2c5bc..1d5328a606b 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog | |||
| @@ -1,3 +1,10 @@ | |||
| 1 | 2008-05-15 Eric S. Raymond <esr@snark.thyrsus.com> | ||
| 2 | |||
| 3 | * vc2-xtra.texi, emacs.texi, files.texi: Snapshots node renamed to | ||
| 4 | Revision Tags and rewritten. Section now uses modern terminology | ||
| 5 | (tags rather than snapshots) and describes post-SCCS systems more | ||
| 6 | accurately. | ||
| 7 | |||
| 1 | 2008-05-10 Eli Zaretskii <eliz@gnu.org> | 8 | 2008-05-10 Eli Zaretskii <eliz@gnu.org> |
| 2 | 9 | ||
| 3 | * msdog.texi (Windows Files): Update documentation of | 10 | * msdog.texi (Windows Files): Update documentation of |
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index 28b72eb5c13..b9d2a0993c6 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi | |||
| @@ -119,7 +119,7 @@ and to avoid conflicts. | |||
| 119 | Completion | 119 | Completion |
| 120 | Backup Files | 120 | Backup Files |
| 121 | Auto-Saving: Protection Against Disasters | 121 | Auto-Saving: Protection Against Disasters |
| 122 | Snapshots | 122 | Tags |
| 123 | Text Mode | 123 | Text Mode |
| 124 | Outline Mode | 124 | Outline Mode |
| 125 | @TeX{} Mode | 125 | @TeX{} Mode |
| @@ -462,7 +462,7 @@ Version Control | |||
| 462 | * Secondary VC Commands:: The commands used a little less frequently. | 462 | * Secondary VC Commands:: The commands used a little less frequently. |
| 463 | * Branches:: Multiple lines of development. | 463 | * Branches:: Multiple lines of development. |
| 464 | * Remote Repositories:: Efficient access to remote CVS servers. | 464 | * Remote Repositories:: Efficient access to remote CVS servers. |
| 465 | * Snapshots:: Sets of file versions treated as a unit. | 465 | * Revision Tags:: Symbolic names for revisions |
| 466 | * Miscellaneous VC:: Various other commands and features of VC. | 466 | * Miscellaneous VC:: Various other commands and features of VC. |
| 467 | * Customizing VC:: Variables that change VC's behavior. | 467 | * Customizing VC:: Variables that change VC's behavior. |
| 468 | 468 | ||
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 9d525393004..0d6808d9e45 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi | |||
| @@ -1238,7 +1238,7 @@ customizable variable @code{vc-handled-backends} to @code{nil} | |||
| 1238 | * Branches:: Multiple lines of development. | 1238 | * Branches:: Multiple lines of development. |
| 1239 | @ifnottex | 1239 | @ifnottex |
| 1240 | * Remote Repositories:: Efficient access to remote CVS servers. | 1240 | * Remote Repositories:: Efficient access to remote CVS servers. |
| 1241 | * Snapshots:: Sets of file versions treated as a unit. | 1241 | * Revision Tags:: Symbolic names for revisions |
| 1242 | * Miscellaneous VC:: Various other commands and features of VC. | 1242 | * Miscellaneous VC:: Various other commands and features of VC. |
| 1243 | * Customizing VC:: Variables that change VC's behavior. | 1243 | * Customizing VC:: Variables that change VC's behavior. |
| 1244 | @end ifnottex | 1244 | @end ifnottex |
| @@ -1300,8 +1300,8 @@ git, and Mercurial. | |||
| 1300 | SCCS was the first version-control system ever built, and was long ago | 1300 | SCCS was the first version-control system ever built, and was long ago |
| 1301 | superseded by later and more advanced ones; Emacs supports it only for | 1301 | superseded by later and more advanced ones; Emacs supports it only for |
| 1302 | backward compatibility and historical reasons. VC compensates for | 1302 | backward compatibility and historical reasons. VC compensates for |
| 1303 | certain features missing in SCCS (snapshots, for example) by | 1303 | certain features missing in SCCS (tag names for releases, for example) by |
| 1304 | implementing them itself, but some other VC features, such as multiple | 1304 | implementing them itself. Some other VC features, such as multiple |
| 1305 | branches, are not available with SCCS. Since SCCS is non-free you | 1305 | branches, are not available with SCCS. Since SCCS is non-free you |
| 1306 | should not use it; use its free replacement CSSC instead. But you | 1306 | should not use it; use its free replacement CSSC instead. But you |
| 1307 | should use CSSC only if for some reason you cannot use a more | 1307 | should use CSSC only if for some reason you cannot use a more |
| @@ -1895,19 +1895,19 @@ buffer in another window. | |||
| 1895 | 1895 | ||
| 1896 | You can specify a checked-in revision by its ID; an empty input | 1896 | You can specify a checked-in revision by its ID; an empty input |
| 1897 | specifies the current contents of the work file (which may be different | 1897 | specifies the current contents of the work file (which may be different |
| 1898 | from all the checked-in revisions). You can also specify a snapshot name | 1898 | from all the checked-in revisions). You can also specify a tag or branch name |
| 1899 | @iftex | 1899 | @iftex |
| 1900 | (@pxref{Snapshots,,,emacs-xtra, Specialized Emacs Features}) | 1900 | (@pxref{Tags,,,emacs-xtra, Specialized Emacs Features}) |
| 1901 | @end iftex | 1901 | @end iftex |
| 1902 | @ifnottex | 1902 | @ifnottex |
| 1903 | (@pxref{Snapshots}) | 1903 | (@pxref{Tags}) |
| 1904 | @end ifnottex | 1904 | @end ifnottex |
| 1905 | instead of one or both revision ID. | 1905 | instead of one or both revision ID. |
| 1906 | 1906 | ||
| 1907 | Note that if your version-control system is file-oriented (SCCS, | 1907 | Note that if your version-control system is file-oriented (SCCS, |
| 1908 | RCS, CVS) rather than fileset-oriented (Subversion, GNU Arch, git, | 1908 | RCS, CVS) rather than fileset-oriented (Subversion, GNU Arch, git, |
| 1909 | Mercurial) specifying a revision of a multiple-file fileset by | 1909 | Mercurial) specifying a revision of a multiple-file fileset by |
| 1910 | revision ID (as opposed to a snapshot name or RSCCS/RCS tag) is | 1910 | revision ID (as opposed to a symbolic tag name) is |
| 1911 | unlikely to return diffs that are connected in any meaningful way. | 1911 | unlikely to return diffs that are connected in any meaningful way. |
| 1912 | 1912 | ||
| 1913 | If you invoke @kbd{C-u C-x v =} or @kbd{C-u C-x v =} from a buffer | 1913 | If you invoke @kbd{C-u C-x v =} or @kbd{C-u C-x v =} from a buffer |
diff --git a/doc/emacs/vc-xtra.texi b/doc/emacs/vc-xtra.texi index d08f6b29bf3..f1977d2adb6 100644 --- a/doc/emacs/vc-xtra.texi +++ b/doc/emacs/vc-xtra.texi | |||
| @@ -14,9 +14,9 @@ the Emacs Manual}). This chapter describes more advanced VC usage. | |||
| 14 | 14 | ||
| 15 | @menu | 15 | @menu |
| 16 | * VC Directory Mode:: Listing files managed by version control. | 16 | * VC Directory Mode:: Listing files managed by version control. |
| 17 | * VC Directory Commands:: Commands to use in a VC Dired buffer. | 17 | * VC Directory Commands:: Commands to use in a VC Dired buffer. |
| 18 | * Remote Repositories:: Efficient access to remote VCS servers. | 18 | * Remote Repositories:: Efficient access to remote VCS servers. |
| 19 | * Snapshots:: Sets of file versions treated as a unit. | 19 | * Revision Tags:: Symbolic names for revisions |
| 20 | * Miscellaneous VC:: Various other commands and features of VC. | 20 | * Miscellaneous VC:: Various other commands and features of VC. |
| 21 | * Customizing VC:: Variables that change VC's behavior. | 21 | * Customizing VC:: Variables that change VC's behavior. |
| 22 | @end menu | 22 | @end menu |
diff --git a/doc/emacs/vc2-xtra.texi b/doc/emacs/vc2-xtra.texi index c4d6eac0c46..bbb7a9980bd 100644 --- a/doc/emacs/vc2-xtra.texi +++ b/doc/emacs/vc2-xtra.texi | |||
| @@ -204,51 +204,57 @@ and what is not. So we suggest that you return from time to time to | |||
| 204 | CVS-only operation, by committing your local changes back to the | 204 | CVS-only operation, by committing your local changes back to the |
| 205 | repository using @kbd{C-u C-x v v cvs @key{RET}}. | 205 | repository using @kbd{C-u C-x v v cvs @key{RET}}. |
| 206 | 206 | ||
| 207 | @node Snapshots | 207 | @node Revision Tags |
| 208 | @subsection Snapshots | 208 | @subsection Revision Tags |
| 209 | @cindex snapshots and version control | 209 | @cindex tags and version control |
| 210 | 210 | ||
| 211 | A @dfn{snapshot} is a named set of file versions (one for each | 211 | In a VCS with per-file revision numbers (such as SCCS, RCS, or CVS) |
| 212 | registered file) that you can treat as a unit. One important kind of | 212 | @dfn{tag} is a named set of file versions (one for each registered |
| 213 | snapshot is a @dfn{release}, a (theoretically) stable version of the | 213 | file) that you can treat as a unit. In a VCS with per-repository |
| 214 | system that is ready for distribution to users. | 214 | version numbers (Subversion and most later ones) a tag is simply |
| 215 | a symbolic name for a revsion. | ||
| 216 | |||
| 217 | One important kind of tag is a @dfn{release}, a (theoretically) | ||
| 218 | stable version of the system that is ready for distribution to users. | ||
| 215 | 219 | ||
| 216 | @menu | 220 | @menu |
| 217 | * Making Snapshots:: The snapshot facilities. | 221 | * Making Revision Tags:: The tag facilities. |
| 218 | * Snapshot Caveats:: Things to be careful of when using snapshots. | 222 | * Revision Tag Caveats:: Things to be careful of when using tags. |
| 219 | @end menu | 223 | @end menu |
| 220 | 224 | ||
| 221 | @node Making Snapshots | 225 | @node Making Revision Tags |
| 222 | @subsubsection Making and Using Snapshots | 226 | @subsubsection Making and Using Revision Tags |
| 223 | 227 | ||
| 224 | There are two basic commands for snapshots; one makes a | 228 | There are two basic commands for tags; one makes a |
| 225 | snapshot with a given name, the other retrieves a named snapshot. | 229 | tag with a given name, the other retrieves a named tag. |
| 226 | 230 | ||
| 227 | @table @code | 231 | @table @code |
| 228 | @kindex C-x v s | 232 | @kindex C-x v s |
| 229 | @findex vc-create-snapshot | 233 | @findex vc-create-tag |
| 230 | @item C-x v s @var{name} @key{RET} | 234 | @item C-x v s @var{name} @key{RET} |
| 231 | Define the last saved versions of every registered file in or under the | 235 | Define the working revision of every registered file in or under the |
| 232 | current directory as a snapshot named @var{name} | 236 | current directory as a tag named @var{name} |
| 233 | (@code{vc-create-snapshot}). | 237 | (@code{vc-create-tag}). |
| 234 | 238 | ||
| 235 | @kindex C-x v r | 239 | @kindex C-x v r |
| 236 | @findex vc-retrieve-snapshot | 240 | @findex vc-retrieve-tag |
| 237 | @item C-x v r @var{name} @key{RET} | 241 | @item C-x v r @var{name} @key{RET} |
| 238 | For all registered files at or below the current directory level, select | 242 | For all registered files at or below the current directory level, |
| 239 | whatever versions correspond to the snapshot @var{name} | 243 | retrieve the tagged revision @var{name}. This command will |
| 240 | (@code{vc-retrieve-snapshot}). | 244 | switch to a branch if @var{name} is a branch name and your VCS |
| 245 | distinguishes branches from tags. | ||
| 246 | (@code{vc-retrieve-tag}). | ||
| 241 | 247 | ||
| 242 | This command reports an error if any files are locked at or below the | 248 | This command reports an error if any files are locked at or below the |
| 243 | current directory, without changing anything; this is to avoid | 249 | current directory, without changing anything; this is to avoid |
| 244 | overwriting work in progress. | 250 | overwriting work in progress. |
| 245 | @end table | 251 | @end table |
| 246 | 252 | ||
| 247 | A snapshot uses a very small amount of resources---just enough to record | 253 | Tags are inexpensive, so you need not hesitate to create them whenever |
| 248 | the list of file names and which version belongs to the snapshot. Thus, | 254 | they are useful. Branches vary in cost depending on your VCS; in |
| 249 | you need not hesitate to create snapshots whenever they are useful. | 255 | older ones they may be expensive. |
| 250 | 256 | ||
| 251 | You can give a snapshot name as an argument to @kbd{C-x v =} or | 257 | You can give a tag or branch name as an argument to @kbd{C-x v =} or |
| 252 | @kbd{C-x v ~} | 258 | @kbd{C-x v ~} |
| 253 | @iftex | 259 | @iftex |
| 254 | (@pxref{Old Revisions,,,emacs, the Emacs Manual}). | 260 | (@pxref{Old Revisions,,,emacs, the Emacs Manual}). |
| @@ -256,50 +262,40 @@ you need not hesitate to create snapshots whenever they are useful. | |||
| 256 | @ifnottex | 262 | @ifnottex |
| 257 | (@pxref{Old Revisions}). | 263 | (@pxref{Old Revisions}). |
| 258 | @end ifnottex | 264 | @end ifnottex |
| 259 | Thus, you can use it to compare a snapshot against the current files, | 265 | Thus, you can use it to compare a tagged version against the current files, |
| 260 | or two snapshots against each other, or a snapshot against a named | 266 | or two tagged versions against each other. |
| 261 | version. | 267 | |
| 262 | 268 | @node Revision Tag Caveats | |
| 263 | @node Snapshot Caveats | 269 | @subsubsection Revision Tag Caveats |
| 264 | @subsubsection Snapshot Caveats | 270 | |
| 265 | 271 | For SCCS, VC implements tags itself; these tags are visible only | |
| 266 | @cindex named configurations (RCS) | 272 | through VC. Most later systems (including CVS, Subversion, bzr, git, |
| 267 | VC's snapshot facilities are modeled on RCS's named-configuration | 273 | and hg) have a native tag facility, and VC uses it where |
| 268 | support. They use RCS's native facilities for this, so | 274 | available; those tags will be visible even when you bypass VC. |
| 269 | snapshots made using RCS through VC are visible even when you bypass VC. | 275 | |
| 270 | 276 | There is no support for VC tags using GNU Arch yet. | |
| 271 | With CVS, Meta-CVS, and Subversion, VC also uses the native | 277 | |
| 272 | mechanism provided by that back end to make snapshots and retrieve them | 278 | Under older VCSes (SCCS, RCS, CVS, early versions of Subversion), |
| 273 | (@dfn{tags} for CVS and Meta-CVS, @dfn{copies} for Subversion). | 279 | renaming and deletion could create some difficulties with tags. This is |
| 274 | 280 | not a VC-specific problem, but a general design issue in version | |
| 275 | @c worded verbosely to avoid overfull hbox. | 281 | control systems that was not solved effectively until the earliest |
| 276 | For SCCS, VC implements snapshots itself. The files it uses contain | 282 | third-generation systems. |
| 277 | name/file/version-number triples. These snapshots are visible only | 283 | |
| 278 | through VC. | 284 | In a file-oriented VCS, when you rename a registered file you need |
| 279 | 285 | to rename its master along with it; the command @code{vc-rename-file} | |
| 280 | There is no support for VC snapshots using GNU Arch yet. | 286 | will do this automatically. If you are using SCCS, you must also |
| 281 | 287 | update the records of the tag, to mention the file by its new name | |
| 282 | A snapshot is a set of checked-in versions. So make sure that all the | 288 | (@code{vc-rename-file} does this, too). An old tag that refers to a |
| 283 | files are checked in and not locked when you make a snapshot. | 289 | master file that no longer exists under the recorded name is invalid; |
| 284 | 290 | VC can no longer retrieve it. It would be beyond the scope of this | |
| 285 | File renaming and deletion can create some difficulties with snapshots. | 291 | manual to explain enough about RCS and SCCS to explain how to update |
| 286 | This is not a VC-specific problem, but a general design issue in version | 292 | the tags by hand. |
| 287 | control systems that no one has solved very well yet. | 293 | |
| 288 | 294 | Using @code{vc-rename-file} makes the tag remain valid for | |
| 289 | If you rename a registered file, you need to rename its master along | ||
| 290 | with it (the command @code{vc-rename-file} does this automatically). If | ||
| 291 | you are using SCCS, you must also update the records of the snapshot, to | ||
| 292 | mention the file by its new name (@code{vc-rename-file} does this, | ||
| 293 | too). An old snapshot that refers to a master file that no longer | ||
| 294 | exists under the recorded name is invalid; VC can no longer retrieve | ||
| 295 | it. It would be beyond the scope of this manual to explain enough about | ||
| 296 | RCS and SCCS to explain how to update the snapshots by hand. | ||
| 297 | |||
| 298 | Using @code{vc-rename-file} makes the snapshot remain valid for | ||
| 299 | retrieval, but it does not solve all problems. For example, some of the | 295 | retrieval, but it does not solve all problems. For example, some of the |
| 300 | files in your program probably refer to others by name. At the very | 296 | files in your program probably refer to others by name. At the very |
| 301 | least, the makefile probably mentions the file that you renamed. If you | 297 | least, the makefile probably mentions the file that you renamed. If you |
| 302 | retrieve an old snapshot, the renamed file is retrieved under its new | 298 | retrieve an old tag, the renamed file is retrieved under its new |
| 303 | name, which is not the name that the makefile expects. So the program | 299 | name, which is not the name that the makefile expects. So the program |
| 304 | won't really work as retrieved. | 300 | won't really work as retrieved. |
| 305 | 301 | ||
| @@ -473,10 +469,9 @@ to avoid putting such trivia into @file{ChangeLog}. | |||
| 473 | When you rename a registered file, you must also rename its master | 469 | When you rename a registered file, you must also rename its master |
| 474 | file correspondingly to get proper results. Use @code{vc-rename-file} | 470 | file correspondingly to get proper results. Use @code{vc-rename-file} |
| 475 | to rename the source file as you specify, and rename its master file | 471 | to rename the source file as you specify, and rename its master file |
| 476 | accordingly. It also updates any snapshots (@pxref{Snapshots}) that | 472 | accordingly. It also updates any tags (@pxref{Revision Tags}) that |
| 477 | mention the file, so that they use the new name; despite this, the | 473 | mention the file, so that they use the new name; despite this, the |
| 478 | snapshot thus modified may not completely work (@pxref{Snapshot | 474 | tag thus modified may not completely work (@pxref{Revision Tag Caveats}). |
| 479 | Caveats}). | ||
| 480 | 475 | ||
| 481 | Some back ends do not provide an explicit rename operation to their | 476 | Some back ends do not provide an explicit rename operation to their |
| 482 | repositories. After issuing @code{vc-rename-file}, use @kbd{C-x v v} | 477 | repositories. After issuing @code{vc-rename-file}, use @kbd{C-x v v} |
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 96f0d611113..6504f1cfdbf 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,5 +1,10 @@ | |||
| 1 | 2008-05-15 Eric S. Raymond <esr@snark.thyrsus.com> | 1 | 2008-05-15 Eric S. Raymond <esr@snark.thyrsus.com> |
| 2 | 2 | ||
| 3 | * vc-cvs.el, vc-git.el, vc-hg.el, vc-hooks.el, vc-mcvs.el, | ||
| 4 | vc-rcs.el, vc-sccs.el, vc-svn.el, vc.el: Rename | ||
| 5 | vc-*-create-snapshot and vc-*-retrieve-snapshot to vc-*-create-tag | ||
| 6 | and vc-*-retireve-tag respectively. | ||
| 7 | |||
| 3 | * vc-dispatcher.el: Fix an incorrect buffer name and remove an | 8 | * vc-dispatcher.el: Fix an incorrect buffer name and remove an |
| 4 | unneeded defalias. | 9 | unneeded defalias. |
| 5 | 10 | ||
diff --git a/lisp/vc-cvs.el b/lisp/vc-cvs.el index 41372debcf0..90a6b7b2e1f 100644 --- a/lisp/vc-cvs.el +++ b/lisp/vc-cvs.el | |||
| @@ -622,19 +622,19 @@ systime, or nil if there is none." | |||
| 622 | nil))) | 622 | nil))) |
| 623 | 623 | ||
| 624 | ;;; | 624 | ;;; |
| 625 | ;;; Snapshot system | 625 | ;;; Tag system |
| 626 | ;;; | 626 | ;;; |
| 627 | 627 | ||
| 628 | (defun vc-cvs-create-snapshot (dir name branchp) | 628 | (defun vc-cvs-create-tag (dir name branchp) |
| 629 | "Assign to DIR's current revision a given NAME. | 629 | "Assign to DIR's current revision a given NAME. |
| 630 | If BRANCHP is non-nil, the name is created as a branch (and the current | 630 | If BRANCHP is non-nil, the name is created as a branch (and the current |
| 631 | workspace is immediately moved to that new branch)." | 631 | workspace is immediately moved to that new branch)." |
| 632 | (vc-cvs-command nil 0 dir "tag" "-c" (if branchp "-b") name) | 632 | (vc-cvs-command nil 0 dir "tag" "-c" (if branchp "-b") name) |
| 633 | (when branchp (vc-cvs-command nil 0 dir "update" "-r" name))) | 633 | (when branchp (vc-cvs-command nil 0 dir "update" "-r" name))) |
| 634 | 634 | ||
| 635 | (defun vc-cvs-retrieve-snapshot (dir name update) | 635 | (defun vc-cvs-retrieve-tag (dir name update) |
| 636 | "Retrieve a snapshot at and below DIR. | 636 | "Retrieve a tag at and below DIR. |
| 637 | NAME is the name of the snapshot; if it is empty, do a `cvs update'. | 637 | NAME is the name of the tag; if it is empty, do a `cvs update'. |
| 638 | If UPDATE is non-nil, then update (resynch) any affected buffers." | 638 | If UPDATE is non-nil, then update (resynch) any affected buffers." |
| 639 | (with-current-buffer (get-buffer-create "*vc*") | 639 | (with-current-buffer (get-buffer-create "*vc*") |
| 640 | (let ((default-directory dir) | 640 | (let ((default-directory dir) |
diff --git a/lisp/vc-git.el b/lisp/vc-git.el index b4704efc61e..4a5b7ab8403 100644 --- a/lisp/vc-git.el +++ b/lisp/vc-git.el | |||
| @@ -43,37 +43,39 @@ | |||
| 43 | ;; beginning of vc.el. The current status is: | 43 | ;; beginning of vc.el. The current status is: |
| 44 | ;; ("??" means: "figure out what to do about it") | 44 | ;; ("??" means: "figure out what to do about it") |
| 45 | ;; | 45 | ;; |
| 46 | ;; FUNCTION NAME STATUS | 46 | ;; FUNCTION NAME STATUS |
| 47 | ;; BACKEND PROPERTIES | 47 | ;; BACKEND PROPERTIES |
| 48 | ;; * revision-granularity OK | 48 | ;; * revision-granularity OK |
| 49 | ;; STATE-QUERYING FUNCTIONS | 49 | ;; STATE-QUERYING FUNCTIONS |
| 50 | ;; * registered (file) OK | 50 | ;; * registered (file) OK |
| 51 | ;; * state (file) OK | 51 | ;; * state (file) OK |
| 52 | ;; - state-heuristic (file) NOT NEEDED | 52 | ;; - state-heuristic (file) NOT NEEDED |
| 53 | ;; * working-revision (file) OK | 53 | ;; * working-revision (file) OK |
| 54 | ;; - latest-on-branch-p (file) NOT NEEDED | 54 | ;; - latest-on-branch-p (file) NOT NEEDED |
| 55 | ;; * checkout-model (files) OK | 55 | ;; * checkout-model (files) OK |
| 56 | ;; - workfile-unchanged-p (file) OK | 56 | ;; - workfile-unchanged-p (file) OK |
| 57 | ;; - mode-line-string (file) OK | 57 | ;; - mode-line-string (file) OK |
| 58 | ;; - prettify-state-info (file) OK | 58 | ;; - prettify-state-info (file) OK |
| 59 | ;; STATE-CHANGING FUNCTIONS | 59 | ;; STATE-CHANGING FUNCTIONS |
| 60 | ;; * create-repo () OK | 60 | ;; * create-repo () OK |
| 61 | ;; * register (files &optional rev comment) OK | 61 | ;; * register (files &optional rev comment) OK |
| 62 | ;; - init-revision (file) NOT NEEDED | 62 | ;; - init-revision (file) NOT NEEDED |
| 63 | ;; - responsible-p (file) OK | 63 | ;; - responsible-p (file) OK |
| 64 | ;; - could-register (file) NOT NEEDED, DEFAULT IS GOOD | 64 | ;; - could-register (file) NOT NEEDED, DEFAULT IS GOOD |
| 65 | ;; - receive-file (file rev) NOT NEEDED | 65 | ;; - receive-file (file rev) NOT NEEDED |
| 66 | ;; - unregister (file) OK | 66 | ;; - unregister (file) OK |
| 67 | ;; * checkin (files rev comment) OK | 67 | ;; * checkin (files rev comment) OK |
| 68 | ;; * find-revision (file rev buffer) OK | 68 | ;; * find-revision (file rev buffer) OK |
| 69 | ;; * checkout (file &optional editable rev) OK | 69 | ;; * checkout (file &optional editable rev) OK |
| 70 | ;; * revert (file &optional contents-done) OK | 70 | ;; * revert (file &optional contents-done) OK |
| 71 | ;; - rollback (files) COULD BE SUPPORTED | 71 | ;; - rollback (files) COULD BE SUPPORTED |
| 72 | ;; - merge (file rev1 rev2) It would be possible to merge changes into | 72 | ;; - merge (file rev1 rev2) It would be possible to merge |
| 73 | ;; a single file, but when committing they | 73 | ;; changes into a single file, but when |
| 74 | ;; wouldn't be identified as a merge by git, | 74 | ;; committing they wouldn't |
| 75 | ;; so it's probably not a good idea. | 75 | ;; be identified as a merge |
| 76 | ;; - merge-news (file) see `merge' | 76 | ;; by git, so it's probably |
| 77 | ;; not a good idea. | ||
| 78 | ;; - merge-news (file) see `merge' | ||
| 77 | ;; - steal-lock (file &optional revision) NOT NEEDED | 79 | ;; - steal-lock (file &optional revision) NOT NEEDED |
| 78 | ;; HISTORY FUNCTIONS | 80 | ;; HISTORY FUNCTIONS |
| 79 | ;; * print-log (files &optional buffer) OK | 81 | ;; * print-log (files &optional buffer) OK |
| @@ -81,27 +83,26 @@ | |||
| 81 | ;; - show-log-entry (revision) OK | 83 | ;; - show-log-entry (revision) OK |
| 82 | ;; - comment-history (file) ?? | 84 | ;; - comment-history (file) ?? |
| 83 | ;; - update-changelog (files) COULD BE SUPPORTED | 85 | ;; - update-changelog (files) COULD BE SUPPORTED |
| 84 | ;; * diff (file &optional rev1 rev2 buffer) OK | 86 | ;; * diff (file &optional rev1 rev2 buffer) OK |
| 85 | ;; - revision-completion-table (files) OK | 87 | ;; - revision-completion-table (files) OK |
| 86 | ;; - annotate-command (file buf &optional rev) OK | 88 | ;; - annotate-command (file buf &optional rev) OK |
| 87 | ;; - annotate-time () OK | 89 | ;; - annotate-time () OK |
| 88 | ;; - annotate-current-time () NOT NEEDED | 90 | ;; - annotate-current-time () NOT NEEDED |
| 89 | ;; - annotate-extract-revision-at-line () OK | 91 | ;; - annotate-extract-revision-at-line () OK |
| 90 | ;; SNAPSHOT SYSTEM | 92 | ;; TAG SYSTEM |
| 91 | ;; - create-snapshot (dir name branchp) OK | 93 | ;; - create-tag (dir name branchp) OK |
| 92 | ;; - assign-name (file name) NOT NEEDED | 94 | ;; - retrieve-tag (dir name update) OK, needs to update buffers |
| 93 | ;; - retrieve-snapshot (dir name update) OK, needs to update buffers | ||
| 94 | ;; MISCELLANEOUS | 95 | ;; MISCELLANEOUS |
| 95 | ;; - make-version-backups-p (file) NOT NEEDED | 96 | ;; - make-version-backups-p (file) NOT NEEDED |
| 96 | ;; - repository-hostname (dirname) NOT NEEDED | 97 | ;; - repository-hostname (dirname) NOT NEEDED |
| 97 | ;; - previous-revision (file rev) OK | 98 | ;; - previous-revision (file rev) OK |
| 98 | ;; - next-revision (file rev) OK | 99 | ;; - next-revision (file rev) OK |
| 99 | ;; - check-headers () COULD BE SUPPORTED | 100 | ;; - check-headers () COULD BE SUPPORTED |
| 100 | ;; - clear-headers () NOT NEEDED | 101 | ;; - clear-headers () NOT NEEDED |
| 101 | ;; - delete-file (file) OK | 102 | ;; - delete-file (file) OK |
| 102 | ;; - rename-file (old new) OK | 103 | ;; - rename-file (old new) OK |
| 103 | ;; - find-file-hook () NOT NEEDED | 104 | ;; - find-file-hook () NOT NEEDED |
| 104 | ;; - find-file-not-found-hook () NOT NEEDED | 105 | ;; - find-file-not-found-hook () NOT NEEDED |
| 105 | 106 | ||
| 106 | (eval-when-compile | 107 | (eval-when-compile |
| 107 | (require 'cl) | 108 | (require 'cl) |
| @@ -554,16 +555,16 @@ or BRANCH^ (where \"^\" can be repeated)." | |||
| 554 | (and (looking-at "[0-9a-f^][0-9a-f]+") | 555 | (and (looking-at "[0-9a-f^][0-9a-f]+") |
| 555 | (buffer-substring-no-properties (match-beginning 0) (match-end 0))))) | 556 | (buffer-substring-no-properties (match-beginning 0) (match-end 0))))) |
| 556 | 557 | ||
| 557 | ;;; SNAPSHOT SYSTEM | 558 | ;;; TAG SYSTEM |
| 558 | 559 | ||
| 559 | (defun vc-git-create-snapshot (dir name branchp) | 560 | (defun vc-git-create-tag (dir name branchp) |
| 560 | (let ((default-directory dir)) | 561 | (let ((default-directory dir)) |
| 561 | (and (vc-git-command nil 0 nil "update-index" "--refresh") | 562 | (and (vc-git-command nil 0 nil "update-index" "--refresh") |
| 562 | (if branchp | 563 | (if branchp |
| 563 | (vc-git-command nil 0 nil "checkout" "-b" name) | 564 | (vc-git-command nil 0 nil "checkout" "-b" name) |
| 564 | (vc-git-command nil 0 nil "tag" name))))) | 565 | (vc-git-command nil 0 nil "tag" name))))) |
| 565 | 566 | ||
| 566 | (defun vc-git-retrieve-snapshot (dir name update) | 567 | (defun vc-git-retrieve-tag (dir name update) |
| 567 | (let ((default-directory dir)) | 568 | (let ((default-directory dir)) |
| 568 | (vc-git-command nil 0 nil "checkout" name) | 569 | (vc-git-command nil 0 nil "checkout" name) |
| 569 | ;; FIXME: update buffers if `update' is true | 570 | ;; FIXME: update buffers if `update' is true |
diff --git a/lisp/vc-hg.el b/lisp/vc-hg.el index baa60589f9a..6b025c8cfa7 100644 --- a/lisp/vc-hg.el +++ b/lisp/vc-hg.el | |||
| @@ -76,10 +76,9 @@ | |||
| 76 | ;; - annotate-time () OK | 76 | ;; - annotate-time () OK |
| 77 | ;; - annotate-current-time () NOT NEEDED | 77 | ;; - annotate-current-time () NOT NEEDED |
| 78 | ;; - annotate-extract-revision-at-line () OK | 78 | ;; - annotate-extract-revision-at-line () OK |
| 79 | ;; SNAPSHOT SYSTEM | 79 | ;; TAG SYSTEM |
| 80 | ;; - create-snapshot (dir name branchp) NEEDED (probably branch?) | 80 | ;; - create-tag (dir name branchp) NEEDED |
| 81 | ;; - assign-name (file name) NOT NEEDED | 81 | ;; - retrieve-tag (dir name update) NEEDED |
| 82 | ;; - retrieve-snapshot (dir name update) ?? NEEDED?? | ||
| 83 | ;; MISCELLANEOUS | 82 | ;; MISCELLANEOUS |
| 84 | ;; - make-version-backups-p (file) ?? | 83 | ;; - make-version-backups-p (file) ?? |
| 85 | ;; - repository-hostname (dirname) ?? | 84 | ;; - repository-hostname (dirname) ?? |
diff --git a/lisp/vc-hooks.el b/lisp/vc-hooks.el index ed44eba3498..738cf257562 100644 --- a/lisp/vc-hooks.el +++ b/lisp/vc-hooks.el | |||
| @@ -981,8 +981,8 @@ Used in `find-file-not-found-functions'." | |||
| 981 | (define-key map "i" 'vc-register) | 981 | (define-key map "i" 'vc-register) |
| 982 | (define-key map "l" 'vc-print-log) | 982 | (define-key map "l" 'vc-print-log) |
| 983 | (define-key map "m" 'vc-merge) | 983 | (define-key map "m" 'vc-merge) |
| 984 | (define-key map "r" 'vc-retrieve-snapshot) | 984 | (define-key map "r" 'vc-retrieve-tag) |
| 985 | (define-key map "s" 'vc-create-snapshot) | 985 | (define-key map "s" 'vc-create-tag) |
| 986 | (define-key map "u" 'vc-revert) | 986 | (define-key map "u" 'vc-revert) |
| 987 | (define-key map "v" 'vc-next-action) | 987 | (define-key map "v" 'vc-next-action) |
| 988 | (define-key map "+" 'vc-update) | 988 | (define-key map "+" 'vc-update) |
| @@ -996,12 +996,12 @@ Used in `find-file-not-found-functions'." | |||
| 996 | (let ((map (make-sparse-keymap "Version Control"))) | 996 | (let ((map (make-sparse-keymap "Version Control"))) |
| 997 | ;;(define-key map [show-files] | 997 | ;;(define-key map [show-files] |
| 998 | ;; '("Show Files under VC" . (vc-directory t))) | 998 | ;; '("Show Files under VC" . (vc-directory t))) |
| 999 | (define-key map [vc-retrieve-snapshot] | 999 | (define-key map [vc-retrieve-tag] |
| 1000 | '(menu-item "Retrieve Snapshot" vc-retrieve-snapshot | 1000 | '(menu-item "Retrieve Tag" vc-retrieve-tag |
| 1001 | :help "Retrieve snapshot")) | 1001 | :help "Retrieve tagged version or branch")) |
| 1002 | (define-key map [vc-create-snapshot] | 1002 | (define-key map [vc-create-tag] |
| 1003 | '(menu-item "Create Snapshot" vc-create-snapshot | 1003 | '(menu-item "Create Tag" vc-create-tag |
| 1004 | :help "Create Snapshot")) | 1004 | :help "Create version tag")) |
| 1005 | (define-key map [separator1] '("----")) | 1005 | (define-key map [separator1] '("----")) |
| 1006 | (define-key map [vc-annotate] | 1006 | (define-key map [vc-annotate] |
| 1007 | '(menu-item "Annotate" vc-annotate | 1007 | '(menu-item "Annotate" vc-annotate |
diff --git a/lisp/vc-mcvs.el b/lisp/vc-mcvs.el index dfe3bb1d1f9..32c7b99b41b 100644 --- a/lisp/vc-mcvs.el +++ b/lisp/vc-mcvs.el | |||
| @@ -48,7 +48,7 @@ | |||
| 48 | 48 | ||
| 49 | ;;; Bugs: | 49 | ;;; Bugs: |
| 50 | 50 | ||
| 51 | ;; - Retrieving snapshots doesn't filter `cvs update' output and thus | 51 | ;; - Retrieving tags doesn't filter `cvs update' output and thus |
| 52 | ;; parses bogus filenames. Don't know if it harms. | 52 | ;; parses bogus filenames. Don't know if it harms. |
| 53 | 53 | ||
| 54 | ;;; Code: | 54 | ;;; Code: |
| @@ -461,10 +461,10 @@ Optional arg REVISION is a revision to annotate from." | |||
| 461 | (defalias 'vc-mcvs-annotate-time 'vc-cvs-annotate-time) | 461 | (defalias 'vc-mcvs-annotate-time 'vc-cvs-annotate-time) |
| 462 | 462 | ||
| 463 | ;;; | 463 | ;;; |
| 464 | ;;; Snapshot system | 464 | ;;; Tag system |
| 465 | ;;; | 465 | ;;; |
| 466 | 466 | ||
| 467 | (defun vc-mcvs-create-snapshot (dir name branchp) | 467 | (defun vc-mcvs-create-tag (dir name branchp) |
| 468 | "Assign to DIR's current revision a given NAME. | 468 | "Assign to DIR's current revision a given NAME. |
| 469 | If BRANCHP is non-nil, the name is created as a branch (and the current | 469 | If BRANCHP is non-nil, the name is created as a branch (and the current |
| 470 | workspace is immediately moved to that new branch)." | 470 | workspace is immediately moved to that new branch)." |
| @@ -473,9 +473,9 @@ workspace is immediately moved to that new branch)." | |||
| 473 | (vc-mcvs-command nil 0 dir "branch" name) | 473 | (vc-mcvs-command nil 0 dir "branch" name) |
| 474 | (vc-mcvs-command nil 0 dir "switch" name))) | 474 | (vc-mcvs-command nil 0 dir "switch" name))) |
| 475 | 475 | ||
| 476 | (defun vc-mcvs-retrieve-snapshot (dir name update) | 476 | (defun vc-mcvs-retrieve-tag (dir name update) |
| 477 | "Retrieve a snapshot at and below DIR. | 477 | "Retrieve a tag at and below DIR. |
| 478 | NAME is the name of the snapshot; if it is empty, do a `cvs update'. | 478 | NAME is the name of the tag; if it is empty, do a `cvs update'. |
| 479 | If UPDATE is non-nil, then update (resynch) any affected buffers." | 479 | If UPDATE is non-nil, then update (resynch) any affected buffers." |
| 480 | (with-current-buffer (get-buffer-create "*vc*") | 480 | (with-current-buffer (get-buffer-create "*vc*") |
| 481 | (let ((default-directory dir) | 481 | (let ((default-directory dir) |
diff --git a/lisp/vc-rcs.el b/lisp/vc-rcs.el index 14a091c4a6f..bda6aec95c2 100644 --- a/lisp/vc-rcs.el +++ b/lisp/vc-rcs.el | |||
| @@ -787,12 +787,19 @@ systime, or nil if there is none. Also, reposition point." | |||
| 787 | 787 | ||
| 788 | 788 | ||
| 789 | ;;; | 789 | ;;; |
| 790 | ;;; Snapshot system | 790 | ;;; Tag system |
| 791 | ;;; | 791 | ;;; |
| 792 | 792 | ||
| 793 | (defun vc-rcs-assign-name (file name) | 793 | (defun vc-rcs-create-tag (backend dir name branchp) |
| 794 | "Assign to FILE's latest version a given NAME." | 794 | (when branchp |
| 795 | (vc-do-command "*vc*" 0 "rcs" (vc-name file) (concat "-n" name ":"))) | 795 | (error "RCS backend %s does not support module branches.")) |
| 796 | (let ((result (vc-tag-precondition dir))) | ||
| 797 | (if (stringp result) | ||
| 798 | (error "File %s is not up-to-date" result) | ||
| 799 | (vc-file-tree-walk | ||
| 800 | dir | ||
| 801 | (lambda (f) | ||
| 802 | (vc-do-command "*vc*" 0 "rcs" (vc-name f) (concat "-n" name ":"))))))) | ||
| 796 | 803 | ||
| 797 | 804 | ||
| 798 | ;;; | 805 | ;;; |
diff --git a/lisp/vc-sccs.el b/lisp/vc-sccs.el index f8a98f52702..a5096da9643 100644 --- a/lisp/vc-sccs.el +++ b/lisp/vc-sccs.el | |||
| @@ -352,12 +352,20 @@ revert all subfiles." | |||
| 352 | 352 | ||
| 353 | 353 | ||
| 354 | ;;; | 354 | ;;; |
| 355 | ;;; Snapshot system | 355 | ;;; Tag system. SCCS doesn't have tags, so we simulate them by maintaining |
| 356 | ;;; our own set of name-to-revision mappings. | ||
| 356 | ;;; | 357 | ;;; |
| 357 | 358 | ||
| 358 | (defun vc-sccs-assign-name (file name) | 359 | (defun vc-sccs-create-tag (backend dir name branchp) |
| 359 | "Assign to FILE's latest revision a given NAME." | 360 | (when branchp |
| 360 | (vc-sccs-add-triple name file (vc-working-revision file))) | 361 | (error "SCCS backend %s does not support module branches.")) |
| 362 | (let ((result (vc-tag-precondition dir))) | ||
| 363 | (if (stringp result) | ||
| 364 | (error "File %s is not up-to-date" result) | ||
| 365 | (vc-file-tree-walk | ||
| 366 | dir | ||
| 367 | (lambda (f) | ||
| 368 | (vc-sccs-add-triple name f (vc-working-revision f))))))) | ||
| 361 | 369 | ||
| 362 | 370 | ||
| 363 | ;;; | 371 | ;;; |
| @@ -373,7 +381,7 @@ revert all subfiles." | |||
| 373 | (defun vc-sccs-rename-file (old new) | 381 | (defun vc-sccs-rename-file (old new) |
| 374 | ;; Move the master file (using vc-rcs-master-templates). | 382 | ;; Move the master file (using vc-rcs-master-templates). |
| 375 | (vc-rename-master (vc-name old) new vc-sccs-master-templates) | 383 | (vc-rename-master (vc-name old) new vc-sccs-master-templates) |
| 376 | ;; Update the snapshot file. | 384 | ;; Update the tag file. |
| 377 | (with-current-buffer | 385 | (with-current-buffer |
| 378 | (find-file-noselect | 386 | (find-file-noselect |
| 379 | (expand-file-name vc-sccs-name-assoc-file | 387 | (expand-file-name vc-sccs-name-assoc-file |
| @@ -446,7 +454,7 @@ The result is a list of the form ((REVISION . USER) (REVISION . USER) ...)." | |||
| 446 | (kill-buffer (current-buffer)))) | 454 | (kill-buffer (current-buffer)))) |
| 447 | 455 | ||
| 448 | (defun vc-sccs-lookup-triple (file name) | 456 | (defun vc-sccs-lookup-triple (file name) |
| 449 | "Return the numeric revision corresponding to a named snapshot of FILE. | 457 | "Return the numeric revision corresponding to a named tag of FILE. |
| 450 | If NAME is nil or a revision number string it's just passed through." | 458 | If NAME is nil or a revision number string it's just passed through." |
| 451 | (if (or (null name) | 459 | (if (or (null name) |
| 452 | (let ((firstchar (aref name 0))) | 460 | (let ((firstchar (aref name 0))) |
diff --git a/lisp/vc-svn.el b/lisp/vc-svn.el index 44f7e8eb44d..0b0828ac23d 100644 --- a/lisp/vc-svn.el +++ b/lisp/vc-svn.el | |||
| @@ -465,20 +465,20 @@ or svn+ssh://." | |||
| 465 | (buffer-size (get-buffer buffer))))) | 465 | (buffer-size (get-buffer buffer))))) |
| 466 | 466 | ||
| 467 | ;;; | 467 | ;;; |
| 468 | ;;; Snapshot system | 468 | ;;; Tag system |
| 469 | ;;; | 469 | ;;; |
| 470 | 470 | ||
| 471 | (defun vc-svn-create-snapshot (dir name branchp) | 471 | (defun vc-svn-create-tag (dir name branchp) |
| 472 | "Assign to DIR's current revision a given NAME. | 472 | "Assign to DIR's current revision a given NAME. |
| 473 | If BRANCHP is non-nil, the name is created as a branch (and the current | 473 | If BRANCHP is non-nil, the name is created as a branch (and the current |
| 474 | workspace is immediately moved to that new branch). | 474 | workspace is immediately moved to that new branch). |
| 475 | NAME is assumed to be a URL." | 475 | NAME is assumed to be a URL." |
| 476 | (vc-svn-command nil 0 dir "copy" name) | 476 | (vc-svn-command nil 0 dir "copy" name) |
| 477 | (when branchp (vc-svn-retrieve-snapshot dir name nil))) | 477 | (when branchp (vc-svn-retrieve-tag dir name nil))) |
| 478 | 478 | ||
| 479 | (defun vc-svn-retrieve-snapshot (dir name update) | 479 | (defun vc-svn-retrieve-tag (dir name update) |
| 480 | "Retrieve a snapshot at and below DIR. | 480 | "Retrieve a tag at and below DIR. |
| 481 | NAME is the name of the snapshot; if it is empty, do a `svn update'. | 481 | NAME is the name of the tag; if it is empty, do a `svn update'. |
| 482 | If UPDATE is non-nil, then update (resynch) any affected buffers. | 482 | If UPDATE is non-nil, then update (resynch) any affected buffers. |
| 483 | NAME is assumed to be a URL." | 483 | NAME is assumed to be a URL." |
| 484 | (vc-svn-command nil 0 dir "switch" name) | 484 | (vc-svn-command nil 0 dir "switch" name) |
diff --git a/lisp/vc.el b/lisp/vc.el index 7f355a6c38a..57f8f092d0e 100644 --- a/lisp/vc.el +++ b/lisp/vc.el | |||
| @@ -438,28 +438,23 @@ | |||
| 438 | ;; corresponding to the current line, or nil if there is no revision | 438 | ;; corresponding to the current line, or nil if there is no revision |
| 439 | ;; corresponding to the current line. | 439 | ;; corresponding to the current line. |
| 440 | ;; | 440 | ;; |
| 441 | ;; SNAPSHOT SYSTEM | 441 | ;; TAG SYSTEM |
| 442 | ;; | 442 | ;; |
| 443 | ;; - create-snapshot (dir name branchp) | 443 | ;; - create-tag (dir name branchp) |
| 444 | ;; | 444 | ;; |
| 445 | ;; Take a snapshot of the current state of files under DIR and name it | 445 | ;; Attach the tag NAME to the state of the working copy. This |
| 446 | ;; NAME. This should make sure that files are up-to-date before | 446 | ;; should make sure that files are up-to-date before proceeding with |
| 447 | ;; proceeding with the action. DIR can also be a file and if BRANCHP | 447 | ;; the action. DIR can also be a file and if BRANCHP is specified, |
| 448 | ;; is specified, NAME should be created as a branch and DIR should be | 448 | ;; NAME should be created as a branch and DIR should be checked out |
| 449 | ;; checked out under this new branch. The default implementation does | 449 | ;; under this new branch. The default implementation does not |
| 450 | ;; not support branches but does a sanity check, a tree traversal and | 450 | ;; support branches but does a sanity check, a tree traversal and |
| 451 | ;; for each file calls `assign-name'. | 451 | ;; assigns the tag to each file. |
| 452 | ;; | 452 | ;; |
| 453 | ;; - assign-name (file name) | 453 | ;; - retrieve-tag (dir name update) |
| 454 | ;; | 454 | ;; |
| 455 | ;; Give name NAME to the working revision of FILE, assuming it is | 455 | ;; Retrieve the version tagged by NAME of all registered files at or below DIR. |
| 456 | ;; up-to-date. Only used by the default version of `create-snapshot'. | ||
| 457 | ;; | ||
| 458 | ;; - retrieve-snapshot (dir name update) | ||
| 459 | ;; | ||
| 460 | ;; Retrieve a named snapshot of all registered files at or below DIR. | ||
| 461 | ;; If UPDATE is non-nil, then update buffers of any files in the | 456 | ;; If UPDATE is non-nil, then update buffers of any files in the |
| 462 | ;; snapshot that are currently visited. The default implementation | 457 | ;; tag that are currently visited. The default implementation |
| 463 | ;; does a sanity check whether there aren't any uncommitted changes at | 458 | ;; does a sanity check whether there aren't any uncommitted changes at |
| 464 | ;; or below DIR, and then performs a tree walk, using the `checkout' | 459 | ;; or below DIR, and then performs a tree walk, using the `checkout' |
| 465 | ;; function to retrieve the corresponding revisions. | 460 | ;; function to retrieve the corresponding revisions. |
| @@ -570,8 +565,6 @@ | |||
| 570 | ;; | 565 | ;; |
| 571 | ;;;; Improved branch and tag handling: | 566 | ;;;; Improved branch and tag handling: |
| 572 | ;; | 567 | ;; |
| 573 | ;; - "snapshots" should be renamed to "tags", and thoroughly reworked. | ||
| 574 | ;; | ||
| 575 | ;; - add a generic mechanism for remembering the current branch names, | 568 | ;; - add a generic mechanism for remembering the current branch names, |
| 576 | ;; display the branch name in the mode-line. Replace | 569 | ;; display the branch name in the mode-line. Replace |
| 577 | ;; vc-cvs-sticky-tag with that. | 570 | ;; vc-cvs-sticky-tag with that. |
| @@ -580,7 +573,7 @@ | |||
| 580 | ;; adapted accordingly. Also, it considers RCS and CVS to be the same, | 573 | ;; adapted accordingly. Also, it considers RCS and CVS to be the same, |
| 581 | ;; which is pretty confusing. | 574 | ;; which is pretty confusing. |
| 582 | ;; | 575 | ;; |
| 583 | ;; - vc-create-snapshot and vc-retrieve-snapshot should update the | 576 | ;; - vc-create-tag and vc-retrieve-tag should update the |
| 584 | ;; buffers that might be visiting the affected files. | 577 | ;; buffers that might be visiting the affected files. |
| 585 | ;; | 578 | ;; |
| 586 | ;;;; Default Behavior: | 579 | ;;;; Default Behavior: |
| @@ -2047,10 +2040,10 @@ outside of VC) and one wants to do some operation on it." | |||
| 2047 | 2040 | ||
| 2048 | ;; Named-configuration entry points | 2041 | ;; Named-configuration entry points |
| 2049 | 2042 | ||
| 2050 | (defun vc-snapshot-precondition (dir) | 2043 | (defun vc-tag-precondition (dir) |
| 2051 | "Scan the tree below DIR, looking for files not up-to-date. | 2044 | "Scan the tree below DIR, looking for files not up-to-date. |
| 2052 | If any file is not up-to-date, return the name of the first such file. | 2045 | If any file is not up-to-date, return the name of the first such file. |
| 2053 | \(This means, neither snapshot creation nor retrieval is allowed.\) | 2046 | \(This means, neither tag creation nor retrieval is allowed.\) |
| 2054 | If one or more of the files are currently visited, return `visited'. | 2047 | If one or more of the files are currently visited, return `visited'. |
| 2055 | Otherwise, return nil." | 2048 | Otherwise, return nil." |
| 2056 | (let ((status nil)) | 2049 | (let ((status nil)) |
| @@ -2063,40 +2056,40 @@ Otherwise, return nil." | |||
| 2063 | status))) | 2056 | status))) |
| 2064 | 2057 | ||
| 2065 | ;;;###autoload | 2058 | ;;;###autoload |
| 2066 | (defun vc-create-snapshot (dir name branchp) | 2059 | (defun vc-create-tag (dir name branchp) |
| 2067 | "Descending recursively from DIR, make a snapshot called NAME. | 2060 | "Descending recursively from DIR, make a tag called NAME. |
| 2068 | For each registered file, the working revision becomes part of | 2061 | For each registered file, the working revision becomes part of |
| 2069 | the named configuration. If the prefix argument BRANCHP is | 2062 | the named configuration. If the prefix argument BRANCHP is |
| 2070 | given, the snapshot is made as a new branch and the files are | 2063 | given, the tag is made as a new branch and the files are |
| 2071 | checked out in that new branch." | 2064 | checked out in that new branch." |
| 2072 | (interactive | 2065 | (interactive |
| 2073 | (list (read-file-name "Directory: " default-directory default-directory t) | 2066 | (list (read-file-name "Directory: " default-directory default-directory t) |
| 2074 | (read-string "New snapshot name: ") | 2067 | (read-string "New tag name: ") |
| 2075 | current-prefix-arg)) | 2068 | current-prefix-arg)) |
| 2076 | (message "Making %s... " (if branchp "branch" "snapshot")) | 2069 | (message "Making %s... " (if branchp "branch" "tag")) |
| 2077 | (when (file-directory-p dir) (setq dir (file-name-as-directory dir))) | 2070 | (when (file-directory-p dir) (setq dir (file-name-as-directory dir))) |
| 2078 | (vc-call-backend (vc-responsible-backend dir) | 2071 | (vc-call-backend (vc-responsible-backend dir) |
| 2079 | 'create-snapshot dir name branchp) | 2072 | 'create-tag dir name branchp) |
| 2080 | (message "Making %s... done" (if branchp "branch" "snapshot"))) | 2073 | (message "Making %s... done" (if branchp "branch" "tag"))) |
| 2081 | 2074 | ||
| 2082 | ;;;###autoload | 2075 | ;;;###autoload |
| 2083 | (defun vc-retrieve-snapshot (dir name) | 2076 | (defun vc-retrieve-tag (dir name) |
| 2084 | "Descending recursively from DIR, retrieve the snapshot called NAME. | 2077 | "Descending recursively from DIR, retrieve the tag called NAME. |
| 2085 | If NAME is empty, it refers to the latest revisions. | 2078 | If NAME is empty, it refers to the latest revisions. |
| 2086 | If locking is used for the files in DIR, then there must not be any | 2079 | If locking is used for the files in DIR, then there must not be any |
| 2087 | locked files at or below DIR (but if NAME is empty, locked files are | 2080 | locked files at or below DIR (but if NAME is empty, locked files are |
| 2088 | allowed and simply skipped)." | 2081 | allowed and simply skipped)." |
| 2089 | (interactive | 2082 | (interactive |
| 2090 | (list (read-file-name "Directory: " default-directory default-directory t) | 2083 | (list (read-file-name "Directory: " default-directory default-directory t) |
| 2091 | (read-string "Snapshot name to retrieve (default latest revisions): "))) | 2084 | (read-string "Tag name to retrieve (default latest revisions): "))) |
| 2092 | (let ((update (yes-or-no-p "Update any affected buffers? ")) | 2085 | (let ((update (yes-or-no-p "Update any affected buffers? ")) |
| 2093 | (msg (if (or (not name) (string= name "")) | 2086 | (msg (if (or (not name) (string= name "")) |
| 2094 | (format "Updating %s... " (abbreviate-file-name dir)) | 2087 | (format "Updating %s... " (abbreviate-file-name dir)) |
| 2095 | (format "Retrieving snapshot into %s... " | 2088 | (format "Retrieving tag into %s... " |
| 2096 | (abbreviate-file-name dir))))) | 2089 | (abbreviate-file-name dir))))) |
| 2097 | (message "%s" msg) | 2090 | (message "%s" msg) |
| 2098 | (vc-call-backend (vc-responsible-backend dir) | 2091 | (vc-call-backend (vc-responsible-backend dir) |
| 2099 | 'retrieve-snapshot dir name update) | 2092 | 'retrieve-tag dir name update) |
| 2100 | (message "%s" (concat msg "done")))) | 2093 | (message "%s" (concat msg "done")))) |
| 2101 | 2094 | ||
| 2102 | ;; Miscellaneous other entry points | 2095 | ;; Miscellaneous other entry points |
| @@ -2693,18 +2686,7 @@ to provide the `find-revision' operation instead." | |||
| 2693 | "Let BACKEND receive FILE from another version control system." | 2686 | "Let BACKEND receive FILE from another version control system." |
| 2694 | (vc-call-backend backend 'register file rev "")) | 2687 | (vc-call-backend backend 'register file rev "")) |
| 2695 | 2688 | ||
| 2696 | (defun vc-default-create-snapshot (backend dir name branchp) | 2689 | (defun vc-default-retrieve-tag (backend dir name update) |
| 2697 | (when branchp | ||
| 2698 | (error "VC backend %s does not support module branches" backend)) | ||
| 2699 | (let ((result (vc-snapshot-precondition dir))) | ||
| 2700 | (if (stringp result) | ||
| 2701 | (error "File %s is not up-to-date" result) | ||
| 2702 | (vc-file-tree-walk | ||
| 2703 | dir | ||
| 2704 | (lambda (f) | ||
| 2705 | (vc-call-backend backend 'assign-name f name)))))) | ||
| 2706 | |||
| 2707 | (defun vc-default-retrieve-snapshot (backend dir name update) | ||
| 2708 | (if (string= name "") | 2690 | (if (string= name "") |
| 2709 | (progn | 2691 | (progn |
| 2710 | (vc-file-tree-walk | 2692 | (vc-file-tree-walk |
| @@ -2714,7 +2696,7 @@ to provide the `find-revision' operation instead." | |||
| 2714 | (vc-error-occurred | 2696 | (vc-error-occurred |
| 2715 | (vc-call-backend backend 'checkout f nil "") | 2697 | (vc-call-backend backend 'checkout f nil "") |
| 2716 | (when update (vc-resynch-buffer f t t))))))) | 2698 | (when update (vc-resynch-buffer f t t))))))) |
| 2717 | (let ((result (vc-snapshot-precondition dir))) | 2699 | (let ((result (vc-tag-precondition dir))) |
| 2718 | (if (stringp result) | 2700 | (if (stringp result) |
| 2719 | (error "File %s is locked" result) | 2701 | (error "File %s is locked" result) |
| 2720 | (setq update (and (eq result 'visited) update)) | 2702 | (setq update (and (eq result 'visited) update)) |
| @@ -3290,7 +3272,7 @@ Invoke FUNC f ARGS on each VC-managed file f underneath it." | |||
| 3290 | ;; The performance problem, it turns out, simplifies in practice to the | 3272 | ;; The performance problem, it turns out, simplifies in practice to the |
| 3291 | ;; problem of making vc-state fast. The two other functions that call | 3273 | ;; problem of making vc-state fast. The two other functions that call |
| 3292 | ;; prs/rlog will not be so commonly used that the slowdown is a problem; one | 3274 | ;; prs/rlog will not be so commonly used that the slowdown is a problem; one |
| 3293 | ;; makes snapshots, the other deletes the calling user's last change in the | 3275 | ;; makes tags, the other deletes the calling user's last change in the |
| 3294 | ;; master. | 3276 | ;; master. |
| 3295 | ;; | 3277 | ;; |
| 3296 | ;; The race condition implies that we have to either (a) lock the master | 3278 | ;; The race condition implies that we have to either (a) lock the master |