comparison src/org/tmatesoft/hg/repo/HgRepository.java @ 487:db48a77ec8ff

Access to reposiotry lock mechanism via HgRepositoryLock
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Mon, 13 Aug 2012 18:11:47 +0200
parents d740edfff563
children 45b3b6ca046f
comparison
equal deleted inserted replaced
486:d740edfff563 487:db48a77ec8ff
36 import org.tmatesoft.hg.internal.ConfigFile; 36 import org.tmatesoft.hg.internal.ConfigFile;
37 import org.tmatesoft.hg.internal.DataAccessProvider; 37 import org.tmatesoft.hg.internal.DataAccessProvider;
38 import org.tmatesoft.hg.internal.Experimental; 38 import org.tmatesoft.hg.internal.Experimental;
39 import org.tmatesoft.hg.internal.Filter; 39 import org.tmatesoft.hg.internal.Filter;
40 import org.tmatesoft.hg.internal.Internals; 40 import org.tmatesoft.hg.internal.Internals;
41 import org.tmatesoft.hg.internal.Lock;
42 import org.tmatesoft.hg.internal.RevlogStream; 41 import org.tmatesoft.hg.internal.RevlogStream;
43 import org.tmatesoft.hg.internal.SubrepoManager; 42 import org.tmatesoft.hg.internal.SubrepoManager;
44 import org.tmatesoft.hg.util.CancelledException; 43 import org.tmatesoft.hg.util.CancelledException;
45 import org.tmatesoft.hg.util.Pair; 44 import org.tmatesoft.hg.util.Pair;
46 import org.tmatesoft.hg.util.Path; 45 import org.tmatesoft.hg.util.Path;
421 } 420 }
422 } 421 }
423 } 422 }
424 } 423 }
425 424
426 private Lock wdLock, storeLock; 425 private HgRepositoryLock wdLock, storeLock;
427 426
428 /** 427 /**
429 * PROVISIONAL CODE, DO NOT USE 428 * PROVISIONAL CODE, DO NOT USE
430 * 429 *
431 * Access repository lock that covers non-store parts of the repository (dirstate, branches, etc - 430 * Access repository lock that covers non-store parts of the repository (dirstate, branches, etc -
432 * everything that has to do with working directory state). 431 * everything that has to do with working directory state).
433 * 432 *
434 * Note, the lock object returned merely gives access to lock mechanism. NO ACTUAL LOCKING IS DONE. 433 * Note, the lock object returned merely gives access to lock mechanism. NO ACTUAL LOCKING IS DONE.
435 * Use {@link Lock#acquire()} to actually lock the repository. 434 * Use {@link HgRepositoryLock#acquire()} to actually lock the repository.
436 * 435 *
437 * @return lock object, never <code>null</code> 436 * @return lock object, never <code>null</code>
438 */ 437 */
439 @Experimental(reason="WORK IN PROGRESS") 438 @Experimental(reason="WORK IN PROGRESS")
440 public Lock getWorkingDirLock() { 439 public HgRepositoryLock getWorkingDirLock() {
441 if (wdLock == null) { 440 if (wdLock == null) {
441 int timeout = getLockTimeout();
442 synchronized (this) { 442 synchronized (this) {
443 if (wdLock == null) { 443 if (wdLock == null) {
444 wdLock = new Lock(new File(repoPathHelper.rewrite("wlock").toString())); 444 wdLock = new HgRepositoryLock(new File(repoPathHelper.rewrite("wlock").toString()), timeout);
445 } 445 }
446 } 446 }
447 } 447 }
448 return wdLock; 448 return wdLock;
449 } 449 }
450 450
451 @Experimental(reason="WORK IN PROGRESS") 451 @Experimental(reason="WORK IN PROGRESS")
452 public Lock getStoreLock() { 452 public HgRepositoryLock getStoreLock() {
453 if (storeLock == null) { 453 if (storeLock == null) {
454 int timeout = getLockTimeout();
454 synchronized (this) { 455 synchronized (this) {
455 if (storeLock == null) { 456 if (storeLock == null) {
456 storeLock = new Lock(new File(repoPathHelper.rewrite("store/lock").toString())); 457 storeLock = new HgRepositoryLock(new File(repoPathHelper.rewrite("store/lock").toString()), timeout);
457 } 458 }
458 } 459 }
459 } 460 }
460 return storeLock; 461 return storeLock;
461 } 462 }
540 rv.add(f); 541 rv.add(f);
541 } 542 }
542 } 543 }
543 return rv; 544 return rv;
544 } 545 }
546
547 private int getLockTimeout() {
548 return getConfiguration().getIntegerValue("ui", "timeout", 600);
549 }
545 } 550 }