summaryrefslogtreecommitdiff
path: root/read-tree.c
AgeCommit message (Collapse)AuthorFilesLines
2006-05-17Merge branch 'jc/read-tree-safety' into nextLibravatar Junio C Hamano1-6/+41
* jc/read-tree-safety: read-tree -m -u: do not overwrite or remove untracked working tree files.
2006-05-17Merge branch 'jc/gitlink' into nextLibravatar Junio C Hamano1-6/+6
* jc/gitlink: read-tree: reorganize bind_merge code.
2006-05-17read-tree: reorganize bind_merge code.Libravatar Junio C Hamano1-6/+6
This does not change the logic but moves the order of checks around so that merging of read-tree safety code would become easier. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-17read-tree -m -u: do not overwrite or remove untracked working tree files.Libravatar Junio C Hamano1-5/+40
When a merge results in a creation of a path that did not exist in HEAD, and if you already have that path on the working tree, because the index has not been told about the working tree file, read-tree happily removes it. The issue was brought up by Santi Béjar on the list. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15Merge branch 'lt/oneway' into nextLibravatar Junio C Hamano1-4/+12
* lt/oneway: read-tree --reset -u fix.
2006-05-15read-tree --reset -u fix.Libravatar Linus Torvalds1-4/+12
The previous commit makes -u to mean "I do want to remove the local changes, just update it from the read tree" only for one-way merge. It makes sense to have it depend on the "--reset" flag instead. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-15Merge branch 'lt/oneway' into nextLibravatar Junio C Hamano1-0/+3
* lt/oneway: read-tree -u one-way merge fix to check out locally modified paths.
2006-05-15read-tree -u one-way merge fix to check out locally modified paths.Libravatar Junio C Hamano1-0/+3
The "-u" flag means "update the working tree files", but to other types of merges, it also implies "I want to keep my local changes" -- because they prevent local changes from getting lost by using verify_uptodate. The one-way merge is different from other merges in that its purpose is opposite of doing something else while keeping unrelated local changes. The point of one-way merge is to nuke local changes. So while it feels somewhat wrong that this actively loses local changes, it is the right thing to do. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-14Merge branch 'lt/oneway' into nextLibravatar Junio C Hamano1-1/+1
* lt/oneway: Simplify "git reset --hard" Allow one-way tree merge to remove old files
2006-05-14Allow one-way tree merge to remove old filesLibravatar Linus Torvalds1-1/+1
For some random reason (probably just because nobody noticed), the one-way merge strategy didn't mark deleted files as deleted, so if you used git-read-tree -m -u <newtree> it would update the files that got changed in the index, but it would not delete the files that got deleted. This should fix it, and I can't imagine that anybody depends on the old strange "update only existing files" behaviour. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-08Merge branch 'jc/clean' into nextLibravatar Junio C Hamano1-2/+2
* jc/clean: Teach git-clean optional <paths>... parameters. Separate object name errors from usage errors Documentation: {caret} fixes (git-rev-list.txt) Fix "git diff --stat" with long filenames Fix repo-config set-multivar error return path.
2006-05-08Separate object name errors from usage errorsLibravatar Dmitry V. Levin1-2/+2
Separate object name errors from usage errors. Signed-off-by: Dmitry V. Levin <ldv@altlinux.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-07Merge branch 'jc/gitlink' into nextLibravatar Junio C Hamano1-5/+63
* jc/gitlink: write-tree: --prefix=<path> read-tree: --prefix=<path>/ option.
2006-05-07Fix crash when reading the empty treeLibravatar Johannes Schindelin1-2/+2
cvsimport needs to call git-read-tree without arguments to create an empty tree. Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-03read-tree: invalidate cache-tree entry when a new index entry is added.Libravatar Junio C Hamano1-0/+2
When doing two-way merge, we failed to invalidate the directory that a new entry is added (we correctly did so for modified and deleted entries). Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-05-01read-tree: --prefix=<path>/ option.Libravatar Junio C Hamano1-7/+65
With "--prefix=<path>/" option, read-tree keeps the current index contents, and reads the contents of named tree-ish under directory at `<prefix>`. The original index file cannot have anything at the path `<prefix>` itself, and have nothing in `<prefix>/` directory. This can be used to graft an independent tree into a subdirectory of the current index. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27read-tree: teach 1-way merege and plain read to prime cache-tree.Libravatar Junio C Hamano1-0/+45
This teaches read-tree to fully populate valid cache-tree when reading a tree from scratch, or reading a single tree into an existing index, reusing only the cached stat information (i.e. one-way merge). We have already taught update-index about cache-tree, so "git checkout" followed by updates to a few path followed by a "git commit" would become very efficient. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-27read-tree: teach 1 and 2 way merges about cache-tree.Libravatar Junio C Hamano1-4/+13
This teaches one-way and two-way "read-tree -m" (and its special form, "read-tree --reset" as well) not to discard cache-tree but invalidate only the changed parts of the tree. When switching between related branches, this helps the eventual commit (i.e. write-tree) by keeping cache-tree valid as much as possible. This does not prime cache-tree yet, but we ought to be able to do that for no-merge (i.e. reading from a tree object) case and, and also perhaps 1 way merge case. With this patch applied, switching between the tip of Linux 2.6 kernel tree and a branch that touches one path (fs/ext3/Makefile) from it invalidates only 3 paths out of 1201 cache-tree entries in the index, and subsequent write-tree takes about a half as much time as before. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-24index: make the index file format extensible.Libravatar Junio C Hamano1-0/+2
... and move the cache-tree data into it. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-04Merge branch 'pe/cleanup' into nextLibravatar Junio C Hamano1-6/+3
* pe/cleanup: Replace xmalloc+memset(0) with xcalloc. Use blob_, commit_, tag_, and tree_type throughout.
2006-04-04Replace xmalloc+memset(0) with xcalloc.Libravatar Peter Eriksen1-6/+3
Signed-off-by: Peter Eriksen <s022018@student.dtu.dk> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-03Merge branch 'lt/fix-sol-pack' into nextLibravatar Junio C Hamano1-9/+19
* lt/fix-sol-pack: Use sigaction and SA_RESTART in read-tree.c; add option in Makefile. safe_fgets() - even more anal fgets()
2006-04-03Use sigaction and SA_RESTART in read-tree.c; add option in Makefile.Libravatar Jason Riedy1-9/+19
Might as well ape the sigaction change in read-tree.c to avoid the same potential problems. The fprintf status output will be overwritten in a second, so don't bother guarding it. Do move the fputc after disabling SIGALRM to ensure we go to the next line, though. Also add a NO_SA_RESTART option in the Makefile in case someone doesn't have SA_RESTART but does restart (maybe older HP/UX?). We want the builder to chose this specifically in case the system both lacks SA_RESTART and does not restart stdio calls; a compat #define in git-compat-utils.h would silently allow broken systems. Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-23sha1_name: warning ambiguous refs.Libravatar Junio C Hamano1-0/+1
This makes sure that many commands that take refs on the command line to honor core.warnambiguousrefs configuration. Earlier, the commands affected by this patch did not read the configuration file. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-05Add --temp and --stage=all options to checkout-index.Libravatar Shawn Pearce1-1/+1
Sometimes it is convient for a Porcelain to be able to checkout all unmerged files in all stages so that an external merge tool can be executed by the Porcelain or the end-user. Using git-unpack-file on each stage individually incurs a rather high penalty due to the need to fork for each file version obtained. git-checkout-index -a --stage=all will now do the same thing, but faster. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-02Documentation: read-tree --aggressiveLibravatar Junio C Hamano1-1/+1
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-01Merge branch 'maint'Libravatar Junio C Hamano1-2/+4
* maint: read-tree --aggressive: remove deleted entry from the working tree.
2006-03-01read-tree --aggressive: remove deleted entry from the working tree.Libravatar Junio C Hamano1-2/+4
When both heads deleted, or our side deleted while the other side did not touch, we did not have to update the working tree. However, we forgot to remove existing working tree file when we did not touch and the other side did. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-23Merge fixes early for next maint series.Libravatar Junio C Hamano1-2/+62
2006-02-23Merge branches 'jc/fix-co-candy', 'jc/fix-rename-leak' and 'ar/fix-win' into ↵Libravatar Junio C Hamano1-0/+60
maint * jc/fix-co-candy: checkout - eye candy. * jc/fix-rename-leak: diffcore-rename: plug memory leak. * ar/fix-win: fix t5600-clone-fail-cleanup.sh on windows
2006-02-22Give no terminating LF to error() function.Libravatar Junio C Hamano1-2/+2
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-22checkout - eye candy.Libravatar Junio C Hamano1-0/+60
This implements "eye candy" similar to the pack-object/unpack-object to entertain users while a large tree is being checked out after a clone or a pull. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-08"Assume unchanged" gitLibravatar Junio C Hamano1-1/+1
This adds "assume unchanged" logic, started by this message in the list discussion recently: <Pine.LNX.4.64.0601311807470.7301@g5.osdl.org> This is a workaround for filesystems that do not have lstat() that is quick enough for the index mechanism to take advantage of. On the paths marked as "assumed to be unchanged", the user needs to explicitly use update-index to register the object name to be in the next commit. You can use two new options to update-index to set and reset the CE_VALID bit: git-update-index --assume-unchanged path... git-update-index --no-assume-unchanged path... These forms manipulate only the CE_VALID bit; it does not change the object name recorded in the index file. Nor they add a new entry to the index. When the configuration variable "core.ignorestat = true" is set, the index entries are marked with CE_VALID bit automatically after: - update-index to explicitly register the current object name to the index file. - when update-index --refresh finds the path to be up-to-date. - when tools like read-tree -u and apply --index update the working tree file and register the current object name to the index file. The flag is dropped upon read-tree that does not check out the index entry. This happens regardless of the core.ignorestat settings. Index entries marked with CE_VALID bit are assumed to be unchanged most of the time. However, there are cases that CE_VALID bit is ignored for the sake of safety and usability: - while "git-read-tree -m" or git-apply need to make sure that the paths involved in the merge do not have local modifications. This sacrifices performance for safety. - when git-checkout-index -f -q -u -a tries to see if it needs to checkout the paths. Otherwise you can never check anything out ;-). - when git-update-index --really-refresh (a new flag) tries to see if the index entry is up to date. You can start with everything marked as CE_VALID and run this once to drop CE_VALID bit for paths that are modified. Most notably, "update-index --refresh" honours CE_VALID and does not actively stat, so after you modified a file in the working tree, update-index --refresh would not notice until you tell the index about it with "git-update-index path" or "git-update-index --no-assume-unchanged path". This version is not expected to be perfect. I think diff between index and/or tree and working files may need some adjustment, and there probably needs other cases we should automatically unmark paths that are marked to be CE_VALID. But the basics seem to work, and ready to be tested by people who asked for this feature. Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-06read-tree --aggressiveLibravatar Junio C Hamano1-0/+32
A new flag --aggressive resolves what we traditionally resolved with external git-merge-one-file inside index while read-tree 3-way merge works. git-merge-octopus and git-merge-resolve use this flag before running git-merge-index with git-merge-one-file. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-12-26avoid asking ?alloc() for zero bytes.Libravatar Junio C Hamano1-7/+10
Avoid asking for zero bytes when that change simplifies overall logic. Later we would change the wrapper to ask for 1 byte on platforms that return NULL for zero byte request. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-28Make the rest of commands work from a subdirectory.Libravatar Junio C Hamano1-0/+2
These commands are converted to run from a subdirectory. commit-tree convert-objects merge-base merge-index mktag pack-objects pack-redundant prune-packed read-tree tar-tree unpack-file unpack-objects update-server-info write-tree Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-08ls-files and read-tree need core.filemodeLibravatar Alex Riesen1-0/+2
ls-files.c and read-tree.c miss the default configuration, in particular the filemode=false part. The recent +x bit flip made me notice that, because git-merge refused to merge anything saying that git-pull.sh is not up to date. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-10-10Remove empty directories after read-tree -u.Libravatar Junio C Hamano1-1/+30
This fixes everybody's favorite gripe that switching branche with 'git checkout' leaves empty directories. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-10-02read-tree: --trivialLibravatar Linus Torvalds1-0/+12
This adds an option --trivial to restrict 3-way 'read-tree -m -u' to happen only if there is no file-level merging required. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-10-02read-tree: remove --head option.Libravatar Junio C Hamano1-8/+2
Initially it was to allow specifying more than one remote to allow creation of an Octopus, but it is not being used. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-20Document -i flag to git-read-treeLibravatar Junio C Hamano1-1/+1
Somehow I missed it when we updated read-tree to support the recursive merge strategy. Also -i should require -m as well, which the command did not check. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-13read-tree: fix bogus debugging statement.Libravatar Junio C Hamano1-6/+9
We wanted to detect case #16 which should be rare, but botched the case when some paths are missing, causing a segfault. My fault. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-10Add a new merge strategy by Fredrik Kuivinen.Libravatar Junio C Hamano1-2/+20
I really wanted to try this out, instead of asking for an adjustment to the 'git merge' driver and waiting. For now the new strategy is called 'fredrik' and not in the list of default strategies to be tried. The script wants Python 2.4 so this commit also adjusts Debian and RPM build procecure files. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-10Plug leak in Daniel's read-tree.Libravatar Junio C Hamano1-0/+1
... and it is ready to be pushed out in the "master" branch. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-10[PATCH] Add debugging help for case #16 to read-tree.cLibravatar Junio C Hamano1-8/+28
This will help us detect if real-world example merges have multiple merge-base candidates and one of them matches one head while another matches the other head. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-10[PATCH] Disable debugging from read-tree.Libravatar Junio C Hamano1-3/+10
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-10[PATCH] Rewrite read-treeLibravatar Daniel Barkalow1-382/+421
Adds support for multiple ancestors, removes --emu23, much simplification. Signed-off-by: Daniel Barkalow <barkalow@iabervon.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-07-29[PATCH] Unify usage strings declarationLibravatar Petr Baudis1-1/+1
All usage strings are now declared as static const char []. This is carried over from my old git-pb branch. Signed-off-by: Petr Baudis <pasky@ucw.cz> Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-07-14Start adding interfaces to read in partial treesLibravatar Linus Torvalds1-1/+1
The same way "git-diff-tree" can limit its output to just a set of matches, we can read in just a partial tree for comparison purposes.
2005-06-15git-read-tree: fix "--reset" handlingLibravatar Linus Torvalds1-0/+1