ÀúÀå¼Ò Á¦°øÀÚ

ÀúÀå¼Ò Á¦°ø¾÷ü(RepositoryProvider)´Â ÀúÀå¼Ò¸¦ ±¸ÇöÇÏ´Â Áß½É Å¬·¡½ºÀÔ´Ï´Ù. ÀÌ Å¬·¡½º´Â ÀúÀå¼Ò °ü¸®¸¦ À§ÇÑ ÇÁ·ÎÁ§Æ®¸¦ ±¸¼ºÇϰí ÀÚ¿ø ¼öÁ¤¿¡ ÇÊ¿äÇÑ ÈÄÅ©¸¦ Á¦°øÇØ¾ß ÇÕ´Ï´Ù. Á¦°ø¾÷ü´Â ÇÁ·ÎÁ§Æ® Áö¼Ó Ư¼ºÀ» »ç¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®¿¡ ¸ÊÇε˴ϴÙ. Á¦°ø¾÷ü¸¦ ÇÁ·ÎÁ§Æ®¿¡ ¸ÊÇÎÇÏ´Â ¸ÞÄ¿´ÏÁòÀÌ ÆÀ APIÀÇ Áß½ÉÀº ¾Æ´ÏÁö¸¸ UI¿¡¼­ ÀÚ¿øÀ» ÇÊÅ͸µÇÒ ¶§ ÀÌ¿¡ ´ëÇØ ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì ÆÀ API¸¦ »ç¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ ÀÛ¾÷À» ¼öÇàÇϰí ÇÁ·ÎÁ§Æ®¸¦ Á¦°ø¾÷ü¿¡ ¿¬°ü½Ãŵ´Ï´Ù.  

Á¦°ø¾÷ü¸¦ ±¸ÇöÇÏ·Á¸é org.eclipse.team.core.repository¸¦ »ç¿ëÇÏ¿© ÀúÀå¼Ò¸¦ Á¤ÀÇÇϰí RepositoryProvider¿¡¼­ ÆÄ»ýµÈ Ŭ·¡½º¸¦ Á¦°øÇØ¾ß ÇÕ´Ï´Ù. ÀÛ¾÷ÇÏ´Â ¹æ¹ýÀ» ÂüÁ¶Çϱâ À§ÇÑ ¿¹Á¦·Î CVS Ŭ¶óÀÌ¾ðÆ®¸¦ »ç¿ëÇÕ´Ï´Ù.

È®ÀåÁ¡

org.eclipse.team.core.repository È®ÀåÁ¡À» »ç¿ëÇÏ¿© ÀúÀå¼Ò Á¤ÀǸ¦ Ãß°¡ÇÕ´Ï´Ù. ´ÙÀ½Àº CVS Ŭ¶óÀ̾ðÆ®ÀÇ ¸¶Å©¾÷ÀÔ´Ï´Ù.

<extension
point="org.eclipse.team.core.repository">
<repository
class="org.eclipse.team.internal.ccvs.core.CVSTeamProvider"
id="org.eclipse.team.cvs.core.cvsprovider">
</repository>
</extension>

ÀÌ ¸¶Å©¾÷Àº ÆÀ Áö¿ø Ç÷¯±×Àο¡ ÆÀ Á¦°ø¾÷ü¸¦ µî·ÏÇϰí Á¦°ø¾÷ü°¡ ÇÁ·ÎÁ§Æ®¿¡ ¿¬°üµÉ ¶§ »ç¿ëÇÒ ID¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ÀúÀå¼Ò¿¡ ´ëÇØ ÁöÁ¤µÈ Ŭ·¡½º´Â RepositoryProvider¸¦ È®ÀåÇØ¾ß ÇÕ´Ï´Ù.

ÀúÀå¼Ò Á¦°øÀÚ ±¸Çö

È®Àå¿¡¼­ ½Äº°µÈ Ŭ·¡½º´Â RepositoryProviderÀÇ ¼­ºêŬ·¡½ºÀ̾î¾ß ÇÕ´Ï´Ù. ÀÌ Å¬·¡½ºÀÇ ±âº» ¿ªÇÒÀº ÀúÀå¼Ò Áö¿øÀ» À§ÇØ ÇÁ·ÎÁ§Æ®¸¦ ±¸¼º ¹× ±¸¼º ÇØÁ¦Çϰí ÇÊ¿äÇÑ ÀÚ¿ø ¼öÁ¤ ÈÄÅ©¸¦ Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù. CVS Ŭ¶óÀÌ¾ðÆ®´Â ÁÁÀº ¿¹Á¦ÀÔ´Ï´Ù. CVS Ŭ¶óÀ̾ðÆ®ÀÇ ÀúÀå¼Ò Á¦°ø¾÷ü´Â CVSTeamProviderÀÔ´Ï´Ù.

   public class CVSTeamProvider extends RepositoryProvider {
...

RepositoryProvider´Â configureProject ¹× deconfigure¶ó´Â µÎ °³ÀÇ Ãß»ó ¸Þ¼Òµå¸¦ Á¤ÀÇÇÕ´Ï´Ù. ¸ðµç Á¦°ø¾÷ü´Â ÀÌµé ¸Þ¼Òµå¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù.

ÇÁ·ÎÁ§Æ®´Â ƯÁ¤ ÀúÀå¼Ò Á¦°ø¾÷ü¿Í óÀ½ ¿¬°üµÉ ¶§ ±¸¼ºµË´Ï´Ù. ÀϹÝÀûÀ¸·Î ÇÁ·ÎÁ§Æ®¸¦ ¼±ÅÃÇÏ°í ÆÀ ¸¶¹ý»ç¸¦ »ç¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®¸¦ ÀúÀå¼Ò¿Í ¿¬°ü½Ãų ¶§ ÀÌ·¯ÇÑ ±¸¼ºÀÌ ÀÌ·ç¾îÁý´Ï´Ù. Á¶ÀÛÀÌ Æ®¸®°ÅµÇ´Â ¹æ¹ý¿¡ »ó°ü ¾øÀÌ ÀÌ ¶§°¡ ÀúÀå¼Ò ±â´ÉÀ» Á¦°øÇÒ Çʿ䰡 ÀÖ´Â ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ µ¥ÀÌÅ͸¦ ¿¬»êÇϰí ij½ÃÇϱ⿡ °¡Àå ÀûÀýÇÑ ½Ã±âÀÔ´Ï´Ù. ÀÌ °æ¿ì ÀÌ¹Ì ÇÁ·ÎÁ§Æ®¸¦ Á¦°ø¾÷ü¿¡ ¸ÊÇÎÇß´Ù°í °¡Á¤ÇÕ´Ï´Ù. ¸ÊÇο¡ ´ëÇØ¼­´Â ±¸¼º ¸¶¹ý»ç¿¡¼­ »ìÆìº¸°Ú½À´Ï´Ù.

CVS Á¦°ø¾÷ü´Â ÇÁ·ÎÁ§Æ®°¡ ±¸¼ºµÇ¾úÀ½À» ´Ü¼øÈ÷ ºê·Îµåij½ºÆ®ÇÕ´Ï´Ù.

public void configureProject() throws CoreException {
CVSProviderPlugin.broadcastProjectConfigured(getProject());
}

Ç÷¯±×ÀÎ ºê·Îµåij½ºÆ® ¸ÞÄ¿´ÏÁòÀÇ ±¸ÇöÀ» ¼öÇàÇÏÁö ¾Ê½À´Ï´Ù. Áö±ÝÀº ÇÁ·ÎÁ§Æ®º° µ¥ÀÌÅ͸¦ ¿¬»êÇϰųª ÃʱâÈ­ÇÏ´Â µ¥ ÇÊ¿äÇÑ ºÎºÐÀ» ¾ð±ÞÇÏ´Â °Í¸¸À¸·Î ÃæºÐÇÕ´Ï´Ù.

»ç¿ëÀÚ°¡ ´õ ÀÌ»ó ÆÀ Á¦°ø¾÷ü¸¦ ÇÁ·ÎÁ§Æ®¿¡ ¿¬°ü½ÃŰ°í ½ÍÁö ¾ÊÀº °æ¿ì ÇÁ·ÎÁ§Æ®´Â ±¸¼º ÇØÁ¦µË´Ï´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷À» ¼öÇàÇÏ´Â »ç¿ëÀÚ Á¶Ä¡¸¦ ±¸ÇöÇÏ´Â °ÍÀº »ç¿ëÀÚ Ç÷¯±×ÀÎÀÔ´Ï´Ù. ±×¸®°í ÆÀ Á¦°ø¾÷ü¿¡¼­ ÇÁ·ÎÁ§Æ®¸¦ ¸ÊÇÎÇÏÁö ¾Ê´Â ÀÛ¾÷µµ ÀÌ Ç÷¯±×Àο¡¼­ ¼öÇàµË´Ï´Ù. ±¸¼º ÇØÁ¦ ¸Þ¼Òµå´Â ÇÁ·ÎÁ§Æ® °ü·Ã ij½Ã¸¦ »èÁ¦Çϰųª UIÀÇ ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ ÂüÁ¶¸¦ Á¦°ÅÇϱ⿡ ÀûÇÕÇÕ´Ï´Ù. CVS Á¦°ø¾÷ü´Â º¸±â¿¡ º¸°üµÈ ÇÁ·ÎÁ§Æ® °ü·Ã ij½Ã¸¦ ºñ¿ì°í ÇÁ·ÎÁ§Æ®°¡ ±¸¼º ÇØÁ¦µÇ¾úÀ½À» ºê·Îµåij½ºÆ®ÇÕ´Ï´Ù.

      public void deconfigure() throws CoreException {
...
try {
EclipseSynchronizer.getInstance().flush(getProject(), true, true /*flush deep*/, null);
} catch(CVSException e) {
throw new CoreException(e.getStatus());
} finally {
CVSProviderPlugin.broadcastProjectDeconfigured(getProject());
}
}

ÇÁ·ÎÁ§Æ® ±¸¼º

ÀϹÝÀûÀ¸·Î ÆÀ UI ºôµåÀÇ Ã¹ ´Ü°è´Â »ç¿ëÀÚ°¡ Ç÷¯±×ÀÎ ÆÀ Áö¿øÀ» À§ÇÑ ÇÁ·ÎÁ§Æ®¸¦ ±¸¼ºÇÒ ¼ö ÀÖ´Â ¸¶¹ý»ç ÆäÀÌÁö¸¦ ±¸ÇöÇϴ °ÍÀÔ´Ï´Ù. ÀÌ ÆäÀÌÁö¿¡¼­ ÆÀ Á¦°ø¾÷ü ID°¡ ÇÁ·ÎÁ§Æ® Ư¼º¿¡ Ãß°¡µË´Ï´Ù. »ç¿ëÀÚ´Â org.eclipse.team.ui.configurationWizards È®ÀåÁ¡¿¡ Á¦°øÇÏ¿© ÇÁ·ÎÁ§Æ® ±¸¼º¿¡ Âü¿©ÇÕ´Ï´Ù. »ç¿ëÀÚ°¡ ÆÀ->ÇÁ·ÎÁ§Æ® °øÀ¯...¸¦ ¼±ÅÃÇÒ ¶§ ÀÌ ¸¶¹ý»ç°¡ Ç¥½ÃµË´Ï´Ù.

CVS Ŭ¶óÀÌ¾ðÆ® ±¸Çö ÄÁÅØ½ºÆ®¿¡¼­ ÀÌ ¸¶¹ý»ç¸¦ ãÀ» ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½Àº ±¸¼º ¸¶¹ý»ç¿ë CVS UI ¸¶Å©¾÷ÀÔ´Ï´Ù.

<extension
point="org.eclipse.team.ui.configurationWizards">
<wizard
name="%SharingWizard.name"
icon="icons/full/wizards/newconnect_wiz.gif"
class="org.eclipse.team.internal.ccvs.ui.wizards.SharingWizard"
id="org.eclipse.team.ccvs.ui.SharingWizard">
</wizard>
</extension>

º¸Åë Ç÷¯±×ÀÎÀº È®ÀåÀ» ½Äº°Çϱâ À§ÇØ °íÀ¯ id ¹× È®ÀåÀ» ±¸ÇöÇÏ´Â class¸¦ Á¦°øÇÕ´Ï´Ù. ¼±ÅÃÇÒ ¼ö ÀÖ´Â Á¦°ø¾÷ü°¡ ¿©·¯ °³ ÀÖ´Â °æ¿ì name ¹× iconÀÌ ÇÁ·ÎÁ§Æ® ±¸¼º ¸¶¹ý»çÀÇ Ã¹ ÆäÀÌÁö¿¡ Ç¥½ÃµË´Ï´Ù.

»ç¿ëÀÚ°¡ Á¦°ø¾÷ü¸¦ ¼±ÅÃÇÏ¸é ±× ´ÙÀ½ ÆäÀÌÁö¿¡´Â Á¦°ø¾÷ü¿¡ ´ëÇÑ Æ¯Á¤ ±¸¼º Á¤º¸°¡ Ç¥½ÃµË´Ï´Ù. Á¦°ø¾÷ü°¡ ¼³Ä¡µÈ À¯ÀÏÇÑ ÆÀ Á¦°ø¾÷ü Ç÷¯±×ÀÎÀÏ °æ¿ì ¸¶¹ý»ç´Â »ç¿ëÀÚ ÆäÀÌÁö·Î Á÷Á¢ °Ç³Ê¶Ý´Ï´Ù. ¸¶¹ý»ç´Â ÁöÁ¤µÈ Workbench ¹× ÇÁ·ÎÁ§Æ®¿¡ ´ëÇØ ¸¶¹ý»ç¸¦ ÃʱâÈ­ÇÏ´Â IConfigurationWizard¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ±¸ÇöÀÇ ³ª¸ÓÁö ´Ü°è´Â ¸¶¹ý»ç µðÀÚÀο¡ µû¶ó ´Þ¶óÁý´Ï´Ù. ÇÁ·ÎÁ§Æ®¸¦ ÆÀ Áö¿ø°ú ¿¬°ü½ÃŰ´Â µ¥ ÇÊ¿äÇÑ ¸ðµç Á¤º¸¸¦ ¼öÁýÇØ¾ß ÇÕ´Ï´Ù.

¸¶¹ý»ç°¡ ¿Ï·áµÇ¸é RepositoryProvider.map(IProject, String)À» »ç¿ëÇÏ¿© ÆÀ Á¦°ø¾÷ü¸¦ ÇÁ·ÎÁ§Æ®¿¡ ¸ÊÇÎÇØ¾ß ÇÕ´Ï´Ù. ¸ÊÇÎÀº ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ Á¤È®ÇÑ ÇÁ·ÎÁ§Æ® Áö¼Ó Ư¼º ÁöÁ¤À» ó¸®ÇÕ´Ï´Ù.

CVS Ŭ¶óÀÌ¾ðÆ®´Â Á¦°ø¾÷üÀÇ setSharing ¸Þ¼Òµå¿¡¼­ ÀÌ ÀÛ¾÷À» ¼öÇàÇÕ´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â ¸¶¹ý»ç°¡ ¿Ï·áµÉ ¶§ È£ÃâµË´Ï´Ù.

public void setSharing(IProject project, FolderSyncInfo info, IProgressMonitor monitor) throws TeamException {

// Ensure provided info matches that of the project
...
// Ensure that the provided location is managed
...
// Register the project with Team
RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
}

Á¦°ø¾÷ü ã±â

RepositoryProviderÀÇ Á¤Àû ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© Ŭ¶óÀÌ¾ðÆ®´Â ÇÁ·ÎÁ§Æ®¸¦ Á¦°ø¾÷ü¿¡ °£´ÜÇÏ°Ô ¸ÊÇÎÇϰí ÁÖ¾îÁø ÇÁ·ÎÁ§Æ®¿¡ ¿¬°üµÈ Á¦°ø¾÷ü¸¦ ½±°Ô ãÀ» ¼ö ÀÖ½À´Ï´Ù.

ÀúÀå¼Ò Á¦°øÀÚ ¹× ¼º´É

Á¦Ç°¿¡¼­ ÀúÀå¼Ò Ç÷¯±×ÀÎÀ» ¼º´É¿¡ Ãß°¡Çϵµ·Ï ¼±ÅÃÇÒ °æ¿ì ¼º´ÉÀ» ÀúÀå¼Ò ID¿¡ ¹ÙÀεåÇØ¾ß ÇÕ´Ï´Ù. RepositoryProvider¸¦ ¼º´ÉÀ¸·Î »ç¿ë °¡´ÉÇÏ°Ô ÇÏ·Á¸é ´ÙÀ½ µÎ °¡Áö ´Ü°è¸¦ ¼öÇàÇØ¾ß ÇÕ´Ï´Ù.

1. ¼º´ÉÀ» ÀúÀå¼Ò Á¦°øÀÚ ID¿¡ ¹ÙÀεåÇϽʽÿÀ. ÀÌ·¸°Ô ÇÏ¸é ÆÀ Ç÷¯±×ÀÎÀÌ ÀúÀå¼Ò Á¦°øÀÚ ID¸¦ ±âÁØÀ¸·Î Ȱ¼ºÈ­/ºñȰ¼ºÈ­ÇÒ ¼ö ÀÖ½À´Ï´Ù.

<activityPatternBinding
    activityId="org.eclipse.team.cvs"
    pattern="org\.eclipse\.team\.cvs\.core/.*cvsnature">
</activityPatternBinding>

2. ´ÙÀ½À¸·Î ¼º´ÉÀ» Á¦°øÀÚÀÇ ¸ðµç UI ÆÐŰÁö¿¡ ¹ÙÀεåÇϽʽÿÀ.

<activityPatternBinding
     activityId="org.eclipse.team.cvs"
     pattern="org\.eclipse\.team\.cvs\.ui/.*">
</activityPatternBinding>

ÆÀ Ç÷¯±×Àο¡¼­ Á¤ÀÇÇÏ´Â µÎ °³ÀÇ ¼º´É Æ®¸®°Å È®ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù. ù ¹øÂ° È®ÀåÁ¡Àº Workbench ¼º´ÉÀÇ »ç¿ë °¡´É/»ç¿ë ºÒ°¡´ÉÇÑ »óŸ¦ ±âÁØÀ¸·Î ÀúÀå¼Ò Á¦°øÀÚÀÇ ÇÊÅ͸µÀ» Çã¿ëÇÏ´Â ÆÀ > ÇÁ·ÎÁ§Æ® °øÀ¯... ¸¶¹ý»çÀ̸ç, ´Ù¸¥ Çϳª´Â ÆÀ Ç÷¯±×ÀÎ ÀÚµ¿ »ç¿ë °¡´É Æ®¸®°ÅÀÔ´Ï´Ù.

ÀÚ¿ø ¼öÁ¤ ÈÄÅ©

ÀúÀå¼Ò Á¦°øÀÚ¿Í ¿¬°üµÈ ´ëºÎºÐÀÇ ±â´ÉÀº »ç¿ëÀÚ°¡ Á¦°øÀÚ¿¡ ´ëÇØ ±¸¼ºµÇ¾î ÀÖ´Â ÇÁ·ÎÁ§Æ®ÀÇ ÀÚ¿ø¿¡ ´ëÇØ ÀÛ¾÷ÇÒ ¶§ ¹ß»ýÇÕ´Ï´Ù. »ç¿ëÀÚ°¡ ÀÚ¿ø¿¡ ´ëÇØ ÀÛ¼ºÇÏ´Â º¯°æ»çÇ×À» ¾Ë±â À§ÇØ Á¦°øÀÚ´Â ÀÚ¿ø ¼öÁ¤ ÈÄÅ©¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ÀÚ¿ø Ç÷¯±×ÀÎÀº ÀÌ·¯ÇÑ ÈÄÅ©¸¦ È®ÀåÁ¡À¸·Î Á¦°øÇÕ´Ï´Ù. IMoveDeleteHook, IFileModificationValidator ¹× ResourceRuleFactory¿¡ ´ëÇÑ ¹®¼­¿¡¼­ ÀÌ·¯ÇÑ ÈÄÅ©¸¦ ±¸ÇöÇϱâ À§ÇÑ ¼¼ºÎ»çÇ×À» ¼³¸íÇÕ´Ï´Ù.

ÆÀ Ç÷¯±×ÀÎÀº ÀÚ¿ø Ç÷¯±×Àο¡ ÀÏ¹Ý ÈÄÅ©¸¦ µî·ÏÇÏ¿© ÈÄÅ©¸¦ ÃÖÀûÈ­µÈ ¹æ¹ýÀ¸·Î °£´ÜÇÏ°Ô ÀûÀýÇÑ ÀÚ¿ø¿¡ ¿¬°ü½Ãŵ´Ï´Ù. ÀÌ ÀÏ¹Ý ÈÄÅ©´Â ÁÖ¾îÁø ÀÚ¿ø¿¡ ´ëÇÑ ÀúÀå¼Ò Á¦°ø¾÷ü¸¦ ã¾Æ ÈÄÅ©¸¦ ¾ò½À´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é °¢ Á¦°ø¾÷ü ±¸ÇöÀÌ ÈÄÅ©¸¦ µî·ÏÇÏ¿© Á¦°ø¾÷ü°¡ ÀÚ¿øÀ» °ü¸®ÇÏ´ÂÁö ¿©ºÎ¸¦ ¿ì¼± È®ÀÎÇÏÁö ¾Ê°íµµ ÇϳªÀÇ Á¦°ø¾÷ü ÈÄÅ©¸¸À» È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.

Ç÷¯±×Àο¡ ´ëÇØ ÀÌ´Â RepositoryProviderÀÇ ¸Þ¼Òµå¸¦ ´ëüÇÏ¿© ÇÊ¿äÇÑ ÈÄÅ©¸¦ Á¦°øÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.  ÀÌ·¯ÇÑ ¸Þ¼ÒµåÀÇ ±âº» ±¸ÇöÀº ³Î(null)·Î ÀÀ´äÇϴµ¥, À̰ÍÀº ÈÄÅ©°¡ ÇÊ¿äÇÏÁö ¾ÊÀ½À» Ç¥½ÃÇÕ´Ï´Ù(¾Æ·¡¿¡ ¼³¸íµÈ ÀÚ¿ø ±ÔÄ¢ ÆÑÅ丮 Á¦¿Ü).

¹ýÀû ÁÖÀÇ»çÇ×